对象列表上的活动记录关联对象

时间:2016-07-13 09:40:36

标签: ruby-on-rails activerecord

我有两个模型:Region和Item,带有has_many_through关联。

我可以按预期写作:

Region.find(4).items

我想要实现的是

Region.where(:id => [4,5,6]).items

这导致

undefined method `items'

有一种简单的方法吗?除了循环区域并结合结果?

3 个答案:

答案 0 :(得分:1)

您可以尝试此查询

Region.where(id: 2..5).includes(:hosts)

这返回一个activerecord关系。每个区域对象都将加载相关的主机。

答案 1 :(得分:0)

正如权力建议的那样,这就是我所需要的:

Item.joins(:regions).where("regions.id IN (?)", [4,5,6])

我在周围添加了()?使它真正起作用。

答案 2 :(得分:0)

试试这个

result = Region.where(:id => [4,5,6]).map(&:items)

如果您想要单个数组,请在结果上调用flatten方法。