我有两个看起来像这样的模型:
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
答案 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找到有关该主题的精彩摘要。您可以使用它来避免关联之间的多次查询。