Gly*_*yph 3 ruby ruby-on-rails
基本上,我想完成这样的事情:
Class Node < ActiveRecord::Base
has_and_belongs_to_many :parents, :class_name=>'Node'
has_and_belongs_to_many :children, :class_name=>'Node'
end
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我不完全确定这样做的正确方法.我将尝试接下来明确定义一个连接表并同时使用它:如果这是解决方案,该列是否会被称为"children_id"或"child_id"?
Pin*_*nyM 14
Class Node < ActiveRecord::Base
has_and_belongs_to_many :parents, :class_name=>'Node', :join_table => "parents_children", :foreign_key => :child_id, :association_foreign_key => :parent_id
has_and_belongs_to_many :children, :class_name=>'Node', :join_table => "parents_children", :foreign_key => :parent_id, :association_foreign_key => :child_id
end
Run Code Online (Sandbox Code Playgroud)
请注意,只要在此处设置了适当的外键名称,就可以重命名连接表和外键.
这是可行的,但我强烈建议使用has_many :through:
class Node < ActiveRecord::Base
has_many :parent_node_links,
:class_name => 'NodeLink',
:foreign_key => :child_id
has_many :parents,
:through => :parent_node_links,
:source => :parent
has_many :child_node_links,
:class_name => 'NodeLink',
:foreign_key => :parent_id
has_many :children,
:through => :child_node_links,
:source => :child
end
class NodeLink < ActiveRecord::Base
belongs_to :parent,
:class_name => "Node"
belongs_to :child,
:class_name => "Node"
end
Run Code Online (Sandbox Code Playgroud)
拥有一流的连接模型可以更轻松地管理关系,并让您可以在以后的时间点自由添加相关的元数据.
| 归档时间: |
|
| 查看次数: |
3117 次 |
| 最近记录: |