Wow He estado luchando con esto durante todo el día, siguiendo el documento "oficial" de ruby on rails guides, y descubrí que el documento podría haberme equivocado desde el principio. Solo quiero confirmar si esto es cierto.¿Ruby on Rails guía el documento en la asociación de Activerecord incorrecto?
Si va a http://guides.rubyonrails.org/association_basics.html y debajo de 2.10. sí se une a la sección que dice:
class Employee < ActiveRecord::Base
has_many :subordinates, :class_name => "Employee"
belongs_to :manager, :class_name => "Employee",
:foreign_key => "manager_id"
end
Ahora, soy un novato y apenas creía en el código (¿Qué más puedo hacer?) y escribió un código que es una variación de este mismo caso se unen. Sin embargo, cuanto más lo miraba, más no me sentía bien. ¿No se supone que :subordinates
tiene el campo :foreign_key
en lugar de :manager
? De todos modos lo acabo de cambiar para que el código sea algo así como:
class Employee < ActiveRecord::Base
has_many :subordinates, :class_name => "Employee", :foreign_key => "manager_id"
belongs_to :manager, :class_name => "Employee"
end
y ahora está funcionando. ¿Me estoy perdiendo de algo? ¿O es el documento oficial incorrecto? Es difícil creer que el documento oficial presente información incorrecta, pero tal vez sea así.
Sí, tienes razón. Una asociación llamada 'manager' asumiría por supuesto correctamente la clave externa' manager_id'. Y entonces la asociación 'subordinados' asumiría de la misma manera la inválida foreign_key' subordinate_id', por lo que es la que necesita cambiar. – DanneManne
Envío commit para docrails, que corrige este error – MikDiet
Veo cómo se colocó correctamente el: foreign_key => 'manager_id'. Hasta donde yo sé, foreign_key va con el lado belongs_to de la relación. Me gustaría ver un ejemplo de lo que llamas "... y ahora está funcionando". Por supuesto que podría estar perdiendo algo. – Daniel