2017-03-17 57 views
1

所以我运行了一个.where查询来选择一组activerecords。每个记录都有一个.items关联,每个关联的项目都有一个theme_id。无论如何,我可以过滤只有那些有关联项目的theme_id为0的记录,而无需执行每个初始数组或每种显式循环?Activerecord查询过滤器之后

为了说明它更好地:

[P_0,...,P_N]就是我的。哪里过滤 每个p后获得具有[I_0,...,1-N] 关联数组每个我都有一个theme_id。我想只得到那些有一个项目,其theme_id为0.

回答

0

我不知道你的代码库,所以这是在黑暗中刺,但你不能通过预订获得相同的数组有点逻辑?

ary = Item.where(theme_id: 0).map {|i| i.association_you_want } 
0

您可以通过joins实现此目的。例如。

MyRecord.joins(:items).where("items.theme_id" => 0).distinct 

distinct是必要的,因为有两个项目的记录否则会在结果中包含两次。这是数据库连接如何工作的一个怪癖。

0

ActiveRecord where采用“散列语法”,允许您指定关联(以及这些关联的关联)。 joinswhere之间的交互有点有趣,其中joins需要表名,where需要关联名称。这些哈希语法where条件可以根据需要嵌套。

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

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

虽然此代码段可以解决的问题,[包括一个解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于改善您的帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 – DimaSan