在ActiveRecord, has_many :through, and Polymorphic Associations中,OP的示例請求忽略的Alien
和Person
(SentientBeing
)可能的超類。這是我的問題所在。ActiveRecord的,的has_many:通過,多態關聯與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
在本變形例爲Alien
和Person
的grouper_type
值現在都存儲由滑軌作爲SentientBeing
(滑軌尋求出的基類此grouper_type
值)。
在這種情況下,修改has_many
的Widget
以按類型過濾的正確方法是什麼?我希望能夠做Widget.find(n).people
和Widget.find(n).aliens
,但目前這些方法(.people
和.aliens
)都返回空集[]
因爲grouper_type
總是SentientBeing
。
這個問題與我之前發佈的[1]非常相似。 這是一個有趣的問題,因爲像你說的,'grouper_type'屬性只存儲超類。似乎需要的是小部件和sentient_beings表之間的連接。像我用過的一個更冗長的查詢可能會適合你,但它不是很好 - 因此我問我的問題。 [1]:http://stackoverflow.com/questions/6582588/rails-structuring-a-query-involving-a-polymorphic-association-and-sti – JamesDS
<3匿名反對票。 – deefour