比方说,我想找到给定狗主人的朋友所拥有的所有阿尔萨斯人。
可以按照以下伪代码拆分查询吗? (显然:owners = ...
不起作用):
def self.get_alsatian_pals_of(the_dog)
:owners = the_dog.owner.friends
@alsatians = Dog.joins(:owners).where(dogs: {owner_id: :owners.id}).where(dogs: {breed: "alsatian"})
end
但是您可以看到我要做什么吗?
问题1:如何将一个查询(:owners
)中的集合“重新提交”到另一个查询中?
问题2:必须有一种“正确”的方式来做到这一点,全部都在一行上。看起来如何?
答案 0 :(得分:3)
尝试一下:
def self.get_alsatian_pals_of(the_dog)
owners = the_dog.owner.friends
@alsatians = Dog.where(owner_id: owners.ids, breed: "alsatian")
end
基本上这里的错误是:owners.id
,应该是:owners.ids
,而joins
语句是不必要的。