[ruby-on-rails] ActiveRecord, has_many: through y Asociaciones polimórficas


Answers

Como se mencionó anteriormente, esto no funciona con los rieles 3.1.1 debido a un error en: source, pero está fijo en Rails 3.1.2

Question

Gente,

Quiero asegurarme 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, con un Widget y una Persona, hacer algo como:

widget.people << my_person

Sin embargo, cuando hago esto, he notado que el 'tipo' de 'grouper' siempre es nulo en widget_groupings. Sin embargo, si hago algo como lo siguiente:

widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person}) 

Entonces todo funciona como normalmente hubiera esperado. 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!






Related