how can I do self-reference with ruby on rails?

自古美人都是妖i 提交于 2020-01-10 17:28:04

问题


I want to self-referentiate a model in a RoR app but, I don't know exactly how. I want to save a linked list where the next node has the id of the previous one. how can I do this rails way? It is a one-to-one relation.


回答1:


The easiest way:

class MyModel < ActiveRecord::Base
  belongs_to :parent, :class_name => 'MyModel'
  has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id'
end



回答2:


rails 5

add column xxx_id in users table:

in migration file:

add_reference :users, :xxx, index: true

and add code in User model

has_many :users, class_name: 'User', foreign_key: 'xxx_id'
belongs_to :manager, class_name: 'User', foreign_key: 'xxx_id'

If you don't have a manager for every user, you need to add optional: true.

'foreign_key' is not necessary. By default this is guessed to be the name of this class in lower-case and “_id” suffixed.

if foreign_key is user_id, user don't have manager necessary. the result is:

has_many :users, class_name: 'User'
belongs_to :manager, class_name: 'User', optional: true



回答3:


I've spent some time trying to make it work using Rails 3.2.14

The documentation's suggestion for self-joining associations hasn't worked for belongs_to associations. Adding a foreign key fixed the issue.

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



回答4:


Also check out this tutorial by Ryan Bates on self referential association here. Hck's answer will work but for me, I need a JOIN table and so I use a has_many through association of Rails. Good luck!



来源:https://stackoverflow.com/questions/6097288/how-can-i-do-self-reference-with-ruby-on-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!