Rails .where() attribute IS NOT NULL

associations, model, ruby-on-rails

Solution

Try this:

self.sections.includes(:current_revision).
  where("section_revisions.parent_secti‌​on_id IS NOT NULL")

Problem

I have a `Page` model containing many `Section` models which is associated with a `SectionRevision` through `current_revision`. From the `Page` model I am trying to select all `Sections` where the `current_revision.parent_section_id` is not nil. `Section` model: ``` class Section < ActiveRecord::Base belongs_to :page has_many :revisions, :class_name => 'SectionRevision', :foreign_key => 'section_id' has_many :references has_many :revisions, :class_name => 'SectionRevision', :foreign_key => 'section_id' belongs_to :current_revision, :class_name => 'SectionRevision', :foreign_key => 'current_revision_id' delegate :position, to: :current_revision def set_current_revision self.current_revision = self.revisions.order('created_at DESC').first end def children Section.includes(:current_revision).where(:section_revisions => {:parent_section_id => self.id}) end end ``` And `Page` model: ``` class Page < ActiveRecord::Base belongs_to :parent, :class_name => 'Page', :foreign_key => 'parent_page_id' has_many :children, :class_name => 'Page', :foreign_key => 'parent_page_id' belongs_to :page_image, :class_name => 'Image', :foreign_key => 'page_image_id' has_many :sections validates_uniqueness_of :title, :case_sensitive => false def top_level_sections self.sections.includes(:current_revision).where(:section_revisions => {:parent_section_id => "IS NOT NULL"}) end end ``` `Page.top_level_sections` is written based on: Rails where condition using NOT NULL and currently produces an empty array. It doesn't correctly detect if "parent_section_id" is not null. How do i write `Page.top_level_sections` correctly?

Original source

Related problems