【发布时间】:2012-05-19 16:07:22
【问题描述】:
在我的模型中,有父母、孩子和指定的孩子组。组属于父母,孩子属于父母,孩子可能属于同一个父母的一组。
组可能会被删除,然后使用相同的名称但不同的 ID 重新创建。一个孩子通过名称而不是 id 来引用它的组,因此如果该组被重新创建,它将属于同一个组。同名的组可能存在多个父母,所以我们需要区分它们。
class Parent < ActiveRecord::Base
has_many :groups
has_many :children
end
class Group < ActiveRecord::Base
belongs_to :parent
has_many :children,
:foreign_key => :group_name,
:primary_key => :name,
:conditions => proc { "children.parent_id = #{self.parent_id}" }
end
class Child < ActiveRecord::Base
belongs_to :parent
belongs_to :group,
:foreign_key => :group_name,
:primary_key => :name,
:conditions => proc { "groups.parent_id = #{self.parent_id}" }
end
在我尝试急切地加载儿童组之前,这非常有效。 Child.where(...).includes(:group) 给 undefined method parent_id' for #<Class:0x00000002dcc290>。条件 proc 中的 self 是 Child 类,而不是 Child 对象。
我如何渴望加载这样的关联?还是我的模型结构很愚蠢?已经想到了组的复合主键,但我宁愿不这样做,因为默认情况下 rails 不支持。
【问题讨论】:
标签: ruby-on-rails eager-loading belongs-to