Ludzie,ActiveRecord, has_many: through i Polymorphic Associations
Chcesz się upewnić, że rozumiem to poprawnie. I proszę zignoruj tutaj przypadek dziedziczenia (SentientBeing), próbując zamiast tego skupić się na modelach polimorficznych w has_many: poprzez relacje. To powiedziawszy, należy rozważyć następujące ...
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
w idealnym świecie, chciałbym, otrzymał widget a osoba, zrobić coś takiego:
widget.people << my_person
Jednak, kiedy zrobić to, zauważyłem, że "typ" grupy "grouper" zawsze ma wartość null w widget_groupings. Jednakże, jeśli mam coś takiego:
widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person})
Wtedy wszystkie prace, jak bym się normalnie spodziewał. Wydaje mi się, że nigdy nie widziałem, żeby to miało miejsce w przypadku nie polimorficznych skojarzeń i chciałem tylko wiedzieć, czy jest to coś konkretnego dla tego przypadku użycia, czy też potencjalnie patrzę na błąd.
Dzięki za pomoc!
O mój Boże, który jest tak boleśnie oczywisty, że nie mogę uwierzyć, że przeszmuglowałem nad nim. Dzięki EmFi! – Cory
Nie ma problemu, myślę, że zadręczałem się przez około jeden dzień nad tym, jak to zrobić, gdy pierwszy raz go spotkałem. Nie pomogło mi to, że była to jedna z pierwszych rzeczy, które próbowałem zrobić w Railsach, które nie wymagały zastosowania się do tutorialu/książki. – EmFi
Dziękuję EmFi. – jdl