Rails 与迁移的递归关联
Rails recursive association with migrations
我有一个 table 命名节点。每个节点都属于同一个 table 的一个父亲,并且在同一个 table 上也有一个 child。这是节点模型:
class Node < ApplicationRecord
belongs_to :parent # I tried using :node instead of :parent
has_one :children # Same than above
end
我怎样才能轻松做到这一点?
class Node < ApplicationRecord
belongs_to :parent , :class_name => "Node", :foreign_key => "parent_id", optional: true
has_one :child, :class_name => "Node", :foreign_key => "parent_id"
end
在那种情况下,您应该在 Node
模型中有 parent_id
。同样对于 has_one
关系,按照惯例它应该是 child
而不是 children
。
查询将是这样的:-
parent = Node.create(parent_id: nil)
child = Node.create(parent_id: parent.id)
获取所有 parent =>
Node.where(parent_id: nil)
获取 child 个 parent =>
parent.child
我相信你正在寻找的是这样的东西:
class CreateNodes < ActiveRecord::Migration[5.0]
def change
create_table :nodes do |t|
t.belongs_to :parent,
foreign_key: { to_table: :nodes },
null: true
t.timestamps
end
end
end
class Node < ApplicationRecord
belongs_to :parent, class_name: 'Node', optional: true
has_many :children, class_name: 'Node', foreign_key: 'parent_id'
end
它在一个节点和它的子节点之间建立了一个自引用的一对多关联。
我有一个 table 命名节点。每个节点都属于同一个 table 的一个父亲,并且在同一个 table 上也有一个 child。这是节点模型:
class Node < ApplicationRecord
belongs_to :parent # I tried using :node instead of :parent
has_one :children # Same than above
end
我怎样才能轻松做到这一点?
class Node < ApplicationRecord
belongs_to :parent , :class_name => "Node", :foreign_key => "parent_id", optional: true
has_one :child, :class_name => "Node", :foreign_key => "parent_id"
end
在那种情况下,您应该在 Node
模型中有 parent_id
。同样对于 has_one
关系,按照惯例它应该是 child
而不是 children
。
查询将是这样的:-
parent = Node.create(parent_id: nil)
child = Node.create(parent_id: parent.id)
获取所有 parent =>
Node.where(parent_id: nil)
获取 child 个 parent =>
parent.child
我相信你正在寻找的是这样的东西:
class CreateNodes < ActiveRecord::Migration[5.0]
def change
create_table :nodes do |t|
t.belongs_to :parent,
foreign_key: { to_table: :nodes },
null: true
t.timestamps
end
end
end
class Node < ApplicationRecord
belongs_to :parent, class_name: 'Node', optional: true
has_many :children, class_name: 'Node', foreign_key: 'parent_id'
end
它在一个节点和它的子节点之间建立了一个自引用的一对多关联。