如何在轨道上使用ruby进行自我引用?

JRa*_*elM 21 ruby-on-rails self-reference

我想在RoR应用程序中自我介绍模型,但我不确切知道如何.我想保存链接列表,其中下一个节点具有前一个节点的id.我该怎么做这种导轨方式?这是一对一的关系.

Hck*_*Hck 63

最简单的方法:

class MyModel < ActiveRecord::Base
  belongs_to :parent, :class_name => 'MyModel'
  has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id'
end
Run Code Online (Sandbox Code Playgroud)


小智 10

铁轨5

在users表中添加列xxx_id:

在迁移文件中:

add_reference :users, :xxx, index: true
Run Code Online (Sandbox Code Playgroud)

并在用户模型中添加代码

has_many :users, class_name: 'User', foreign_key: 'xxx_id'
belongs_to :manager, class_name: 'User', foreign_key: 'xxx_id'
Run Code Online (Sandbox Code Playgroud)

如果您没有为每个用户提供管理器,则需要添加optional:true.

'foreign_key'没有必要.默认情况下,这被认为是小写的这个类的名称和后缀"_id".

如果foreign_key是user_id,则用户没有必要的经理.结果是:

has_many :users, class_name: 'User'
belongs_to :manager, class_name: 'User', optional: true
Run Code Online (Sandbox Code Playgroud)