Как я могу сделать самоотдачу с ruby ​​на рельсах? - PullRequest
19 голосов
/ 23 мая 2011

Я хочу самостоятельно сослаться на модель в приложении RoR, но не знаю точно, как. Я хочу сохранить связанный список, где следующий узел имеет идентификатор предыдущего. как я могу сделать этот путь рельсов? Это отношение один к одному.

Ответы [ 4 ]

61 голосов
/ 23 мая 2011

Самый простой способ:

class MyModel < ActiveRecord::Base
  belongs_to :parent, :class_name => 'MyModel'
  has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id'
end
6 голосов
/ 13 марта 2018

рельсы 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'

Если у вас нет менеджера для каждого пользователя, вам нужно добавить опционально: true.

«Foreign_key» не требуется. По умолчанию предполагается, что это имя класса в нижнем регистре и суффикс «_id».

если foreign_key равен user_id, пользователю не нужен менеджер. результат:

has_many :users, class_name: 'User'
belongs_to :manager, class_name: 'User', optional: true
2 голосов
/ 10 августа 2013

Я потратил некоторое время, пытаясь заставить его работать с использованием 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
0 голосов
/ 08 ноября 2016

Также ознакомьтесь с этим уроком Райана Бейтса о самореференциальной ассоциации здесь . Ответ Hck будет работать, но для меня мне нужна таблица JOIN, и поэтому я использую has_many через ассоциацию Rails. Удачи!

...