gente,
Voglio essere sicuro di averlo capito correttamente. E per favore ignora il caso dell'ereditarietà qui (SentientBeing), cercando invece di concentrarti sui modelli polimorfici in has_many: attraverso le relazioni. Detto questo, considera quanto segue ...
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
In un mondo perfetto, mi piacerebbe, dato un Widget e una Persona, fare qualcosa come:
widget.people << my_person
Tuttavia, quando lo faccio, ho notato che il "tipo" di "cernia" è sempre nullo in widget_groupings. Tuttavia, se faccio qualcosa di simile al seguente:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
Quindi tutto funziona come mi sarei normalmente aspettato. Non credo di aver mai visto questo verificarsi con associazioni non polimorfiche e volevo solo sapere se si trattava di qualcosa di specifico per questo caso d'uso o se sto potenzialmente fissando un bug.
Grazie per qualsiasi aiuto!