Ruby on rails 作用域和关联不起作用

Ruby on rails 作用域和关联不起作用,ruby-on-rails,ruby,ruby-on-rails-4,squeel,Ruby On Rails,Ruby,Ruby On Rails 4,Squeel,我正在尝试返回关联是否存在的记录: 我尝试了以下范围: class Booking < ActiveRecord::Base has_one :availability scope :with_availability, -> {where{availability.not_eq nil}} scope :without_availability, -> {where{availability.eq nil}} end 班级预订{where{availabili

我正在尝试返回关联是否存在的记录:

我尝试了以下范围:

class Booking < ActiveRecord::Base
  has_one :availability

  scope :with_availability, -> {where{availability.not_eq nil}}
  scope :without_availability, -> {where{availability.eq nil}}
end
班级预订{where{availability.not_eq nil}
作用域:无可用性,->{where{availability.eq nil}
结束

改用实例方法

def with_availability
  availability.present?
end

def without_availability
  availability.blank?
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
班级预订{where(id:availability.pull(:booking_id))}
范围:无可用性,->{where.not(id:availability.pull(:booking_id))}
结束
我还尝试通过下面的链接复制解决方案,但没有成功(但可能会有帮助):

试试这个:

class Booking < ActiveRecord::Base
  has_one :availability

  scope :with_availability, -> { joins{availability} }
  scope :without_availability, -> { joins{availability.outer}.where{availability.id.eq nil} }
end
班级预订{joins{availability}
作用域:没有可用性,->{joins{availability.outer}.where{availability.id.eq nil}
结束

哪一个不起作用?第二个看起来不错(注意第一个中的圆括号
()
),你有什么错误吗?请显示没有可用性的预订。到sql?
“从预订中选择”“预订”“*,其中”“预订”“可用性”“为空”
您与哪些字段进行比较?可用性是一张桌子。我是不是错过了什么?是的,这是一张桌子预订应具有1个可用性。但有时会创建一个带有相关可用性的预订(我还没有找到bug)。因此,我试图返回所有可能没有相关可用性的预订。这不起作用,我试图获取所有符合这些条件的记录。