我期待能夠從父類中去,並告訴我自己的一切所有的孩子,但兒童可能是一套指定和已知的,但不同的類別。
這裏是設置的例子:
class Basket < ApplicationRecord
has_many :apples
has_many :pears
has_many :oranges
end
class Apple
belongs_to :basket
end
class Pear
belongs_to :basket
end
class Orange
belongs_to :basket
end
我知道我能做到這一點 - 逐一對每個特定的水果 - 這是已經支持Rails中,通過活動記錄。
Basket.pears #=> [ Pear:0x007fd6ec615fd8, Pear:0x343d6e343495fd8 ]
實際問題
但我希望能夠從父類(即Basket
在這個例子中)去了,告訴我一氣呵成的所有兒童(即Apples
,Pears
,Oranges
) 我們可以將這些孩子的分組稱爲fruits
...所以像這樣:
Basket.fruits #=> [ Pear:0x007fd6ec615fd8, Pear:0x343d6e343495fd8, Apple:0x343d6e343495fd8, Orange:0x343d6e343495fd8 ]
此外,我希望它返回一個ActiveRecord_Relation
,所以我可以做這樣的事情:
Basket.fruits.where(fruit_seasonality: 'Fall') #=> [ Orange:0x007fd6ec615fd8 ]
(假設在fruits
所有的兒童類的,有一個屬性,叫做fruit_seasonality
上他們)
我試過的東西:
class Basket < ApplicationRecord
has_many :apples
has_many :pears
has_many :oranges
def fruits
apples + oranges + pears
end
end
這是很酷的話,我可以做Basket.fruits
,但這種方法會返回一個Array
不用於查詢幫助,像Basket.fruits.where
等
我不希望單個表繼承,因爲水果模型在屬性上有很大不同(我想所用的例子並不像它本來可以支持這個的那樣理想) – nickj
在這種情況下,請看一看在多態關聯。在籃子和水果之間使用間歇模型,並使用'belongs_to:fruit,polymorphic:true'。 – slowjack2k