使用Rails 4。
CompensationRecipient --has_many - >补偿--has_many - >付款
所以:
class CompensationRecipient
has_many :compensations
end
class Compensation
has_many :payments
belongs_to :compensation_recipient
end
class Payment
belongs_to :compensation
end
我希望所有获得赔偿的受助人都没有付款。它似乎不应该是非常困难的,但我还没有找到解决方案。
类似的东西:
CompensationRecipient.includes(compensations: :payments).where(compensations: { payments: { id: nil }} )
然而,这不起作用:PG::UndefinedColumn: ERROR: column compensations.compensation_id does not exist
确实,该列不存在。我不明白为什么这个查询会预期它。
答案 0 :(得分:1)
在这种情况下,您需要左外连接。在rails 4中没有特殊的方法(在rails 5中我们有left_joins
),但你可以在joins
方法中传递sql块。
CompensationRecipient
.joins("LEFT JOIN compensations ON compensations.compensation_recipient_id = compensation_recipient.id")
.joins("LEFT JOIN payments ON payments.compensation_id = compensations.id")
.where(payments: { id: nil })
UPD:第一次加入应该是内部的,因为你根本不希望收件人没有补偿,对吗?
CompensationRecipient
.joins(:compensations)
.joins("LEFT JOIN payments ON payments.compensation_id = compensations.id")
.where(payments: { id: nil })