ruby-on-rails - migrations - rails association methods
¿Cómo puedo hacer una auto-referencia con rubí sobre rieles? (4)
Quiero referirme a un modelo en una aplicación RoR, pero no sé exactamente cómo. Quiero guardar una lista enlazada donde el siguiente nodo tenga el ID del anterior. ¿Cómo puedo hacer esta manera de rieles? Es una relación de uno a uno.
He pasado un tiempo tratando de hacer que funcione con Rails 3.2.14
La sugerencia de la documentación para asociaciones de belongs_to
no ha funcionado para asociaciones de belongs_to
. Añadiendo una clave foránea solucionó el problema.
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
La forma más fácil:
class MyModel < ActiveRecord::Base
belongs_to :parent, :class_name => ''MyModel''
has_many :children, :class_name => ''MyModel'', :foreign_key => ''parent_id''
end
También puedes ver este tutorial de Ryan Bates sobre asociación auto referencial here . La respuesta de Hck funcionará, pero para mí, necesito una tabla de UNIR y, por lo tanto, uso un has_many a través de la asociación de Rails. ¡Buena suerte!
carriles 5
agregue la columna xxx_id en la tabla de usuarios:
en el archivo de migración:
add_reference :users, :xxx, index: true
y agregar código en el modelo de usuario
has_many :users, class_name: ''User'', foreign_key: ''xxx_id''
belongs_to :manager, class_name: ''User'', foreign_key: ''xxx_id''
Si no tiene un administrador para cada usuario, debe agregar opcional: verdadero.
''foreign_key'' no es necesario. Por defecto, se supone que es el nombre de esta clase en minúsculas y el sufijo "_id".
si foreign_key es user_id, el usuario no tiene un administrador necesario. el resultado es:
has_many :users, class_name: ''User''
belongs_to :manager, class_name: ''User'', optional: true