我如何has_and_belongs_to_many同一模型的多个实例?

基本上,我想完成这样的事情:

Class Node 'Node' has_and_belongs_to_many :children, :class_name=>'Node' end 

但它不起作用,我不完全确定这样做的正确方法。 我将尝试明确定义一个连接表,并使用它:如果这是解决方案,该列是否会被称为“children_id”或“child_id”?

这是可行的,但我强烈建议使用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 

拥有一流的连接模型可以更轻松地管理关系,并让您可以在以后的时间点自由添加相关的元数据。

 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 

请注意,只要在此处设置了适当的外键名称,就可以重命名连接表和外键。