Rails ActiveRecord联接方法

时间:2019-09-03 23:12:44

标签: ruby-on-rails activerecord

比方说,我想找到给定狗主人的朋友所拥有的所有阿尔萨斯人。

可以按照以下伪代码拆分查询吗? (显然: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:必须有一种“正确”的方式来做到这一点,全部都在一行上。看起来如何?

1 个答案:

答案 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语句是不必要的。