gente,ActiveRecord, has_many: a través, y polimórficos Asociaciones
quiere asegurarse de que entiendo esto correctamente. Y por favor ignore el caso de la herencia aquí (SentientBeing), tratando de enfocarse en modelos polimórficos en has_many: a través de las relaciones. Dicho esto, considere lo siguiente ...
class Widget < ActiveRecord::Base
has_many :widget_groupings
has_many :people, :through => :widget_groupings, :source => :person, :conditions => "widget_groupings.grouper_type = 'Person'"
has_many :aliens, :through => :widget_groupings, :source => :alien, :conditions => "video_groupings.grouper_type = 'Alien'"
end
class Person < ActiveRecord::Base
has_many :widget_groupings, :as => grouper
has_many :widgets, :through => :widget_groupings
end
class Alien < ActiveRecord::Base
has_many :widget_groupings, :as => grouper
has_many :widgets, :through => :widget_groupings
end
class WidgetGrouping < ActiveRecord::Base
belongs_to :widget
belongs_to :grouper, :polymorphic => true
end
En un mundo perfecto, me gustaría, dado un Widget y una persona, hacer algo como:
widget.people << my_person
Sin embargo, cuando lo haga esto, he notado que el 'tipo' de 'grouper' siempre es nulo en widget_groupings. Sin embargo, si hago algo similar a lo siguiente:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
Entonces todo funciona como normalmente esperaba. No creo que haya visto esto ocurrir con asociaciones no polimórficas y solo quería saber si esto era algo específico de este caso de uso o si estoy potencialmente mirando un error.
¡Gracias por cualquier ayuda!
¡Oh, Dios mío, es tan dolorosamente obvio que no puedo creer que haya pasado por alto! Gracias EmFi! – Cory
No hay problema, creo que agonicé durante casi un día sobre cómo hacerlo la primera vez que lo encontré. No ayudó que fuera una de las primeras cosas que intenté hacer en Rails que no implicó seguir un tutorial/libro. – EmFi
Gracias EmFi. – jdl