Области и ассоциации не работают

Я пытаюсь вернуть записи, где ассоциация присутствует или нет:

Я пробовал эти области:

class Booking < ActiveRecord::Base
 has_one :availability
 scope :with_availability, -> {where{availability.not_eq nil}}
 scope :without_availability, -> {where{availability.eq nil}}
end
3 ответа

Попробуйте следующее:

class Booking < ActiveRecord::Base
 has_one :availability
 scope :with_availability, -> { joins{availability} }
 scope :without_availability, -> { joins{availability.outer}.where{availability.id.eq nil} }
end


Я знаю, что есть лучший способ, но это тоже должно работать:

class Booking < ActiveRecord::Base
 has_one :availability
 scope :with_availability, -> {where(id: Availability.pluck(:booking_id))}
 scope :without_availability, -> {where.not(id: Availability.pluck(:booking_id))}
end

Также я попытался воспроизвести решение по ссылке ниже, но мне это не удалось (но это может быть полезно):

Rails - has_one отношения: области для связанных и не связанных объектов


Вместо этого используйте методы экземпляра

def with_availability
 availability.present?
end
def without_availability
 availability.blank?
end

licensed under cc by-sa 3.0 with attribution.