Activerecord复合连接

时间:2014-04-14 15:06:35

标签: ruby-on-rails activerecord

我在使用activerecord join时遇到问题。

我有一个对象“user”跟在某些项目之后,一个对象“content”包含一些可跟随的项目(在这种情况下是品牌)。

uc是我的用户和我的内容。

现在我有这两个问题:

bf = u.follows.where('followable_type = ?', "Brand").map(&:followable_id)

[22, 188, 182, 71, 24, 2]

c.brands.map(&:id)

[2]

我需要获取一个数组,其中包含两个查询中都存在的值,因此在本例中为[2]。

如何编写单个查询?

这样的东西
bf = u.follows.where('followable_type = ?', "Brand").where followable_id are inside c.brands_ids

更新

brands = author.follows.where('followable_type = ?', "Brand").where(followable_id: content.brands.map(&:id)).map(&:followable).map(&:name).join(', ')

1 个答案:

答案 0 :(得分:1)

尝试使用此查询:

sql_subquery = u.follows.where(followable_type: 'Brand').select(:followable_id).to_sql
u.follows.where( followable_id: sql_subquery )

另外,一个好的建议,尝试使用变量的完整名称。它使您的代码更具可读性,即使对您来说也是如此。