Rails .where() attribute IS NOT NULL
19,657
Try this:
self.sections.includes(:current_revision).
where("section_revisions.parent_section_id IS NOT NULL")
Related videos on Youtube
Author by
Ryan King
Updated on September 15, 2022Comments
-
Ryan King over 1 year
I have a
Page
model containing manySection
models which is associated with aSectionRevision
throughcurrent_revision
. From thePage
model I am trying to select allSections
where thecurrent_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? -
tokland over 7 yearsOn newer versions of AR:
sections.includes(:current_revision).where.not(section_revisions: {parent_section_id: nil})