我想在 RoR 应用程序中自我引用模型,但我不知道具体如何。我想保存一个链表,其中下一个节点具有前一个节点的 id。我该怎么做?这是一对一的关系。
问问题
28670 次
3 回答
74
最简单的方法:
class MyModel < ActiveRecord::Base
belongs_to :parent, :class_name => 'MyModel'
has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id'
end
于 2011-05-23T13:09:23.050 回答
24
导轨 5
在 users 表中添加列 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
它们被称为自联接
于 2018-03-13T07:14:22.020 回答
3
我花了一些时间尝试使用 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
于 2013-08-10T06:20:08.463 回答