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

后端 未结 4 721
没有蜡笔的小新
没有蜡笔的小新 2021-01-01 12:34

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 d

相关标签:
4条回答
  • 2021-01-01 13:00

    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
    
    0 讨论(0)
  • 2021-01-01 13:02

    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!

    0 讨论(0)
  • 2021-01-01 13:18

    The easiest way:

    class MyModel < ActiveRecord::Base
      belongs_to :parent, :class_name => 'MyModel'
      has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id'
    end
    
    0 讨论(0)
  • 2021-01-01 13:20

    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
    
    0 讨论(0)
提交回复
热议问题