我想在 RoR 应用程序中自引用模型,但我不确定该怎么做。我想要保存一个链表,其中下一个节点具有前一个节点的 id。如何按照 Rails 的方式实现呢?这是一种一对一的关系。
我想在 RoR 应用程序中自引用模型,但我不确定该怎么做。我想要保存一个链表,其中下一个节点具有前一个节点的 id。如何按照 Rails 的方式实现呢?这是一种一对一的关系。
最简单的方法:
class MyModel < ActiveRecord::Base
belongs_to :parent, :class_name => 'MyModel'
has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id'
end
Rails 5
在用户表中添加 xxx_id 列:
在迁移文件中:
add_reference :users, :xxx, index: true
并在用户模型中添加代码
has_many :users, class_name: 'User', foreign_key: 'xxx_id'
belongs_to :manager, class_name: 'User', foreign_key: 'xxx_id'
如果每个用户都没有经理,那么您需要添加optional:true。
'foreign_key'不是必需的。默认情况下,它被猜测为小写的类名加上“_id”后缀。
如果foreign_key是user_id,用户就不需要经理了。结果如下:
has_many :users, class_name: 'User'
belongs_to :manager, class_name: 'User', optional: true
它们被称为自关联
我花了一些时间尝试使用Rails 3.2.14让它工作起来。
对于自连接关联,文档的建议对于belongs_to
关联没有起作用。添加外键解决了这个问题。
Class User < ActiveRecord::Base
has_many :invitees, class_name: 'User', foreign_key: :invited_by
belongs_to :host, class_name: 'User', foreign_key: :invited_by
end