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)。因此,我试图返回所有可能没有相关可用性的预订。这不起作用,我试图获取所有符合这些条件的记录。