Leute,
Ich möchte sicherstellen, dass ich das richtig verstehe. Und bitte ignorieren Sie den Fall der Vererbung hier (SentientBeing) und versuchen Sie stattdessen, sich auf polymorphe Modelle in has_many zu konzentrieren: durch Beziehungen. Beachten Sie jedoch Folgendes ...
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 einer perfekten Welt möchte ich mit einem Widget und einer Person etwas tun wie:
widget.people << my_person
Dabei habe ich jedoch festgestellt, dass der 'Typ' des 'Grouper' in widget_groupings immer null ist. Allerdings, wenn ich zu so etwas wie folgendem komme:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
Dann funktioniert alles so, wie ich es normalerweise erwartet hätte. Ich glaube nicht, dass ich dies jemals bei nicht polymorphen Assoziationen gesehen habe und wollte nur wissen, ob dies etwas Spezielles für diesen Anwendungsfall ist oder ob ich möglicherweise auf einen Fehler starre.
Vielen Dank für jede Hilfe!