Folks,
Muốn chắc chắn rằng tôi hiểu điều này một cách chính xác. Và vui lòng bỏ qua trường hợp kế thừa ở đây (SentientBeing), thay vào đó cố gắng tập trung vào các mô hình đa hình trong has_many: thông qua các mối quan hệ. Điều đó nói rằng, hãy xem xét những điều sau ...
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
Trong một thế giới hoàn hảo, tôi muốn, được trao một Widget và một Người, làm những điều như:
widget.people << my_person
Tuy nhiên, khi tôi làm điều này, tôi nhận thấy 'loại' 'cá mú' luôn rỗng trong widget_groupings. Tuy nhiên, nếu tôi làm như sau:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
Sau đó, tất cả hoạt động như tôi thường mong đợi. Tôi không nghĩ rằng tôi đã từng thấy điều này xảy ra với các liên kết không đa hình và chỉ muốn biết liệu đây có phải là điều gì đó cụ thể cho trường hợp sử dụng này hay tôi có khả năng đang nhìn chằm chằm vào một lỗi.
Cảm ơn vì bất kì sự giúp đỡ!