ActiveRecord 包括反向
ActiveRecord includes reverse direction
所以我有一个如下所示的查询:
merge_groups_with_mems_and_fps = PersonMergeGroup.joins(:members)
.where('merge_group_members.member_id IN (?)', member_ids)
.includes(:members, :field_preferences)
以及协会的class:
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 并且不进行新查询?非常感谢!
您正在尝试调用 merge_group
关联,但未将其包含在您的原始查询中。除非将其添加到 include
部分,否则每次在 field_preferences
集合中的任何元素上引用 merge_group
时都会生成一个新查询。您可能想要这样的东西:
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
查询的哈希参数。
我认为你需要向 Rails 暗示这个关联:
class FieldPreference < ActiveRecord::Base
belongs_to :merge_group, inverse_of: :field_preference
end
查看 docs. Also, related SO question。
所以我有一个如下所示的查询:
merge_groups_with_mems_and_fps = PersonMergeGroup.joins(:members)
.where('merge_group_members.member_id IN (?)', member_ids)
.includes(:members, :field_preferences)
以及协会的class:
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 并且不进行新查询?非常感谢!
您正在尝试调用 merge_group
关联,但未将其包含在您的原始查询中。除非将其添加到 include
部分,否则每次在 field_preferences
集合中的任何元素上引用 merge_group
时都会生成一个新查询。您可能想要这样的东西:
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
查询的哈希参数。
我认为你需要向 Rails 暗示这个关联:
class FieldPreference < ActiveRecord::Base
belongs_to :merge_group, inverse_of: :field_preference
end
查看 docs. Also, related SO question。