W ActiveRecord, has_many :through, and Polymorphic Associations Przykład OP, zażąda ignorując możliwie nadklasą Alien
i Person
(SentientBeing
). To jest moje pytanie.ActiveRecord, has_many: przez polimorficzne Związki z STI
class Widget < ActiveRecord::Base
has_many :widget_groupings
has_many :people, :through => :widget_groupings, :source => :person, :source_type => 'Person'
has_many :aliens, :through => :widget_groupings, :source => :alien, :source_type => 'Alien'
end
SentientBeing < ActiveRecord::Base
has_many :widget_groupings, :as => grouper
has_many :widgets, :through => :widget_groupings
end
class Person < SentientBeing
end
class Alien < SentientBeing
end
W tym zmodyfikowanym przykładzie, wartość grouper_type
do Alien
i Person
obecnie zarówno przechowywane w szynach w SentientBeing
(szyny poszukuje podstawową klasę tej wartości grouper_type
).
Jaki jest właściwy sposób modyfikacji has_many
w Widget
w celu filtrowania według typu w takim przypadku? Chcę być w stanie zrobić Widget.find(n).people
i Widget.find(n).aliens
, ale obecnie obie te metody (.people
i .aliens
) powrócić zbiór pusty []
ponieważ grouper_type
jest zawsze SentientBeing
.
To pytanie jest bardzo podobne do tego [pisałem wcześniej] [1]. To interesujący problem, ponieważ, jak powiedziałeś, atrybut 'grouper_type' zapisuje tylko nadklasę. Wydaje się, że potrzebne jest połączenie między widżetami a tabelami sentient_beings. Bardziej długowieczna kwerenda, taka jak ta, której użyłbym prawdopodobnie zadziałałaby dla ciebie, ale nie jest ładna - stąd powód, dla którego zadałem moje pytanie. [1]: http://stackoverflow.com/questions/6582588/rails-structuring-a-query-vvolving-a-polymorphic-association-and-sti – JamesDS
<3 anonimowe oddanie głosów. – deefour