模型场景:
A node can belong to a parent node and can have child nodes.
models / node.rb
class Node < ActiveRecord::Base
has_many :children, class_name: "Node", foreign_key: "parent_id"
belongs_to :parent, class_name: "Node"
end
分贝/迁移/ 20131031144907_create_nodes.rb
class CreateNodes < ActiveRecord::Migration
def change
create_table :nodes do |t|
t.timestamps
end
end
end
然后我想迁移以添加关系:
class AddNodesToNodes < ActiveRecord::Migration
def change
add_column :nodes, :parent_id, :integer
# how do i add childen?
end
end
如何在迁移中添加has_many关系?
答案 0 :(得分:11)
您已完成了所需的一切。您可以在此页面中找到更多信息:
来源:http://guides.rubyonrails.org/association_basics.html
node.parent
会发现parent_id
是节点ID并返回父节点。
node.children
会发现parent_id
是节点ID并返回子节点。
当你添加关系时,你可以在Rails 4中这样做:
## rails g migration AddNodesToNodes parent:belongs_to
class AddNodesToNodes < ActiveRecord::Migration
def change
add_reference :nodes, :parent, index: true
end
end
答案 1 :(得分:10)
每RailsGuides,这是自我加入的一个例子。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api/{controller}"
);
}
}
答案 2 :(得分:1)
迁移中不需要任何其他内容。 parent_id用于定义两个方向的关系。具体做法是:
parent - 具有与当前节点的parent_id属性值对应的id的节点。
children - 所有具有parent_id值的节点,该值对应于当前节点的id属性值。
答案 3 :(得分:1)
您已经使用AddNodeToNodes和父ID编写了迁移。
它在数据库级别定义它。
在'rails'级别(ActiveRecord),您可以在模型定义中定义has_many,即定义Node类的Node.rb文件。
添加has_many没有“迁移”。迁移用于数据库字段(和索引等),例如parent_id
,但不用于导轨样式关系定义,例如has_many
。