Millet,
Bunu doğru anladığımdan emin olmak istiyorum. Ve lütfen buradaki miras durumunu göz ardı edin (SentientBeing), bunun yerine has_many'deki polimorfik modellere odaklanmaya çalışın: ilişkiler yoluyla. Bununla birlikte, şunu düşünün ...
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
Mükemmel bir dünyada, bir Widget ve bir Kişi verildiğinde, şöyle bir şey yapmak isterim:
widget.people << my_person
Ancak, bunu yaptığımda, 'gruplayıcı'nın' türünün 'widget_groupings içinde her zaman boş olduğunu fark ettim. Ancak, aşağıdaki gibi bir şey yaparsam:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
Sonra normalde beklediğim gibi işler. Bunun polimorfik olmayan çağrışımlarla gerçekleştiğini hiç görmediğimi sanmıyorum ve sadece bunun bu kullanım durumuna özgü bir şey olup olmadığını veya potansiyel olarak bir hataya bakıp bakmadığımı bilmek istedim.
Herhangi bir yardım için teşekkürler!