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

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

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

class Booking < ActiveRecord::Base
  has_one :availability

  scope :with_availability, -> {where{availability.not_eq nil}}
  scope :without_availability, -> {where{availability.eq nil}}
end

person Batman    schedule 24.09.2015    source источник
comment
Какой из них не работает? Второй выглядит хорошо (обратите внимание на круглые скобки () в первом)   -  person Alexey Shein    schedule 24.09.2015
comment
Вы получаете какую-либо ошибку? Не могли бы вы показать Booking.without_availability.to_sql?   -  person Alexey Shein    schedule 24.09.2015
comment
с какими полями вы проводите сравнение? наличие стол. Я что-то пропустил?   -  person patrickh003    schedule 25.09.2015
comment
Да наличие стола. ` Бронирование должно иметь 1 доступность. Но иногда бронирование создается с ассоциированной доступностью (ошибка, которую я еще не отследил). Поэтому я пытаюсь вернуть все заказы, которые могут не иметь связанной с ними доступности.   -  person Batman    schedule 25.09.2015


Ответы (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
person Alexey Shein    schedule 24.09.2015

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

def with_availability
  availability.present?
end

def without_availability
  availability.blank?
end
person patrickh003    schedule 24.09.2015
comment
Это не сработает, я пытаюсь получить все записи, соответствующие этим условиям. - person Batman; 24.09.2015

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

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: области действия для связанных и не связанных объектов -связанные объекты

person Nickolay Kondratenko    schedule 24.09.2015