我在使用activerecord join时遇到问题。
我有一个对象“user”跟在某些项目之后,一个对象“content”包含一些可跟随的项目(在这种情况下是品牌)。
u
和c
是我的用户和我的内容。
现在我有这两个问题:
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(', ')
答案 0 :(得分:1)
尝试使用此查询:
sql_subquery = u.follows.where(followable_type: 'Brand').select(:followable_id).to_sql
u.follows.where( followable_id: sql_subquery )
另外,一个好的建议,尝试使用变量的完整名称。它使您的代码更具可读性,即使对您来说也是如此。