我有HomeMaker
和PerDateUnavailability
型号。 HomeMaker
has_many per_date_unavailabilities
。我想要所有没有per_date_unavailacilities记录的家庭制造商和有记录的家庭制造商,但不是per_date_unavailabilties.unavailable_date
= somedate
当我想要使用HomeMaker.includes(:per_date_unavailabilities).where(per_date_unavailabilities: {id: nil})
没有PerDateUnavailability记录的HomeMakers时,我通常会做第一部分
使用HomeMaker.joins(:per_date_unavailabilities).where.not(per_date_unavailabilities: {unavailable_date: Date.today})
如何混合这些?
答案 0 :(得分:0)
你需要的sql有点像这样:
select a.*
from home_makers a left join per_date_unavailabilities b
on a.id = b.home_maker_id
where b.home_maker_id is NULL
or b.unavailable_date IS NOT ?;
在ActiveRecord中表达or
子句有点困难,我们最好不要对抗它。 (在OP评论后编辑)
HomeMaker.joins("LEFT JOIN per_date_unavailabilities on per_date_unavailabilities.home_maker_id = home_makers.id")
.where("per_date_unavailabilities.home_maker_id IS NULL OR per_date_unavailabilities.unavailable_date != ?", somedate)