我试图复制一种关系,在这种关系中,某些东西可以有很多孩子,而且很多父母都有自己的属性。
item1 x2-> item2
x3-> item3 x4-> item4 x2-> item1
x6-> item5
我无法创建检索子项的方法以及项目的父项。
这是我到目前为止所做的:
class Decomposition < ActiveRecord::Base
belongs_to :parent, :class_name => 'Item', foreign_key: 'children_omnicode'
belongs_to :child, :class_name => 'Item', foreign_key: 'parent_omnicode'
end
class Item < ActiveRecord::Base
has_many :decompositions, foreign_key: :parent_omnicode
has_many :children, :through => :decompositions, source: :child
has_many :parents, :through => :decompositions, source: :parent
end
我可以为Item创建子项,但.parent方法也会返回子项:
答案 0 :(得分:2)
您需要通过创建两个直接Item
关联来将Decomposition
类关联更改为has_many
:
class Decomposition < ActiveRecord::Base
belongs_to :parent, :class_name => 'Item', foreign_key: 'children_omnicode'
belongs_to :child, :class_name => 'Item', foreign_key: 'parent_omnicode'
end
class Item < ActiveRecord::Base
has_many :parent_decompositions, class_name: "Decomposition", foreign_key: :parent_omnicode
has_many :child_decompositions, class_name: "Decomposition", foreign_key: :children_omnicode
has_many :children, :through => :child_decompositions, source: :child
has_many :parents, :through => :parent_decompositions, source: :parent
end
您现在拥有代码的方式,:children
和:parent
关联都指的是Decompositions
,其中Item
是父级。这解决了这个问题。