所以我运行了一个选择一组activerecords的.where查询。每个记录都有一个.items关联,每个关联的项目都有一个theme_id。无论如何,我只能过滤那些具有theme_id为0的关联项的记录,而不必执行初始数组的.each或任何类型的显式循环?
更好地说明:
[p_0,...,p_n]是我在.where过滤器之后得到的 每个p都有一个关联的数组[i_0,...,i_n] 每个我都有一个theme_id。我想只获得那些具有theme_id为0的项目的p。
答案 0 :(得分:0)
我不知道你的代码库,所以这是一个黑暗中的刺,但是你不能通过保留逻辑来获得相同的数组吗?
ary = Item.where(theme_id: 0).map {|i| i.association_you_want }
答案 1 :(得分:0)
您可以使用joins
实现此目的。 E.g。
MyRecord.joins(:items).where("items.theme_id" => 0).distinct
distinct
是必要的,因为包含两个项目的记录将在结果中包含两次。这是数据库如何加入工作的一个怪癖。
答案 2 :(得分:0)
ActiveRecord where
采用“哈希语法”,允许您指定关联(以及这些关联的关联)。 joins
和where
之间的互动有点有趣,其中joins
需要表名,where
采用关联名称。这些哈希语法where
条件可以根据需要进行深度嵌套。
根据我的经验,最好继续使用哈希语法(如果可以),而不是使用字符串条件。
.joins(:items).where(items: {theme_id: 0})