所以我的查询看起来像这样:
merge_groups_with_mems_and_fps = PersonMergeGroup.joins(:members)
.where('merge_group_members.member_id IN (?)', member_ids)
.includes(:members, :field_preferences)
该协会的类别:
class FieldPreference < ActiveRecord::Base
belongs_to :merge_group
end
现在,当我说出像
这样的话merge_groups_with_mems_and_fps.first.field_preferences[0].merge_group
结果是一个新查询。
什么是确保我调用field_preference时想要使用merge_group的好方法,我只查看merge_groups_with_mems_and_fps并且不进行新查询?非常感谢你!
答案 0 :(得分:0)
您尝试调用merge_group
关联而不将其包含在原始查询中。除非您将其添加到include
部分,否则每次在merge_group
集合中的任何元素上引用field_preferences
时,都会生成新的查询。你可能想要这样的东西:
merge_groups_with_mems_and_fps = PersonMergeGroup.joins(:members)
.where(merge_group_members: member_ids)
.includes(:members, field_preferences: { :merge_group })
PS:ActiveRecord会为您生成IN
个查询,因此您可以将这些条件指定为where
查询的哈希参数。
答案 1 :(得分:0)
我认为您需要向Rails提供有关此关联的提示:
class FieldPreference < ActiveRecord::Base
belongs_to :merge_group, inverse_of: :field_preference
end
查看docs。此外,相关SO question。