在我的模型中,有父母、孩子和命名的孩子组。组属于父母,孩子属于父母,孩子可能属于同一个父母的一组。
组可能会被删除,然后使用相同的名称但不同的 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 是 Child 类,而self
不是 Child 对象。
我如何渴望加载这样的关联?还是我的模型结构很愚蠢?已经想到了组的复合主键,但我宁愿不这样做,因为默认情况下 rails 不支持。