ActiveRecord:从对象数组中获取相关的对象数组

时间:2017-02-14 19:23:29

标签: ruby-on-rails activerecord

我有两个看起来像这样的模型:

class Character < ActiveRecord::Base
    has_one :weapon
end

class Weapon < ActiveRecord::Base
   belongs_to: character
end

鉴于Character个实体的列表,有没有办法可以快速提取Weapon个实体的列表。

在SQL中,我想做的是

SELECT * FROM Characters as c
     INNER JOIN WEAPONS as w
     ON c.id = w.character_id

2 个答案:

答案 0 :(得分:1)

您的问题有点不清楚,因为我不知道您是要求所有Weapon个实例加入所有Character条记录,还是仅仅是一个子集。

所有Character个实例都加入了所有关联的Weapon个实例

Weapon.joins(:character).all

这样,您将在character的每个实例上获得Weapon属性。实际上,您甚至不需要joins(),因为您可以直接访问它们,这将触发LIMIT ONE式SQL查询来获取该记录。

仅适用于子集

Weapon.joins(:character).all.where(character: characters)

这将为您提供Weapon的所有实例,这些实例至少有一个与characters数组关联的实例。

答案 1 :(得分:1)

试试这个:其中character_ids是一个ids数组

Character.eager_load(:weapon)
.where(id: character_ids)

Eager_load:充当内部联接并选择*。您将通过this link找到有关该主题的精彩摘要。您可以使用它来避免关联之间的多次查询。

豫ICP备18024241号-1