Activerecord查询过滤后的位置

时间:2017-03-17 21:20:33

标签: sql ruby-on-rails activerecord

所以我运行了一个选择一组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。

3 个答案:

答案 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采用“哈希语法”,允许您指定关联(以及这些关联的关联)。 joinswhere之间的互动有点有趣,其中joins需要表名,where采用关联名称。这些哈希语法where条件可以根据需要进行深度嵌套。

根据我的经验,最好继续使用哈希语法(如果可以),而不是使用字符串条件。

.joins(:items).where(items: {theme_id: 0})