Orang-orang,
Ingin memastikan saya memahami ini dengan benar. Dan tolong abaikan kasus untuk warisan di sini (SentientBeing), mencoba untuk fokus pada model polimorfik dalam has_many: melalui hubungan. Karena itu, pertimbangkan yang berikut ...
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
Di dunia yang sempurna, saya ingin, dengan Widget dan Orang, melakukan sesuatu seperti:
widget.people << my_person
Namun, ketika saya melakukan ini, saya perhatikan 'type' dari 'grouper' selalu null di widget_groupings. Namun, jika saya ke sesuatu seperti berikut:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
Kemudian semua bekerja seperti yang biasanya saya harapkan. Saya rasa saya belum pernah melihat ini terjadi dengan asosiasi non polimorfik dan hanya ingin tahu apakah ini adalah sesuatu yang spesifik untuk kasus penggunaan ini atau apakah saya berpotensi melihat bug.
Terima kasih atas bantuannya!