2011-05-23 12 views
14

Quiero auto-referentiate un modelo en una aplicación RoR, pero, no sé exactamente cómo. Quiero guardar una lista vinculada donde el siguiente nodo tiene el id del anterior. ¿Cómo puedo hacer esto de esta manera? Es una relación de uno a uno.¿cómo puedo hacer autorreferencia con ruby ​​on rails?

+0

Creo que empiezas buscando en StackOverflow la "asociación de autoreferenciación [ruby-on-rails]": http://stackoverflow.com/search?q=%5Bruby-on-rails%5D%20self%20referential%20association - ¿Duplicar? :-) – conny

+0

De hecho, me han buscado esto, pero no resuelven mi problema. – JRafaelM

Respuesta

51

La forma más sencilla:

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

estoy usando los carriles 3 y necesito una sola referencia no muchos, obras has_one? Si es así, estoy haciendo algo mal. – JRafaelM

2

he pasado algún tiempo tratando de hacer que funcione utilizando rieles 3.2.14

La sugerencia de la documentación para self-joining associations no ha funcionado para belongs_to asociaciones. Agregar 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 
0

También puedes ver este tutorial por Ryan Bates en la auto asociación referencial here. La respuesta de Hck funciona, pero para mí, necesito una tabla de unión y por lo que utilizar un has_many través de la asociación de los rieles. ¡Buena suerte!