背景
我希望能够从父类出发,向我展示它拥有的所有孩子,但是孩子可能是一组 指定和已知的,但不同的类 的
以下是设置示例:
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
我知道我可以通过Active Record逐一为每个特定的水果做到这一点 - 这已经在Rails中得到了支持。
Basket.pears #=> [ Pear:0x007fd6ec615fd8, Pear:0x343d6e343495fd8 ]
实际问题
但我希望能够从父类(即本例中的Basket
)开始,并一次性向我展示所有的孩子(即Apples
,{{1 },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
等。
答案 0 :(得分:0)
听起来你需要单表继承(STI)。
fruits
为此,您需要一个包含type
列的表 <asp:UpdatePanel ID="UpdatePanelSubMeter" runat="server">
<ContentTemplate>
<EditItemTemplate>
<asp:Button ID="btn_Update" Style="background-color: #B2DE94; width: 40px" CausesValidation="false" runat="server" OnClientClick="return fnCheck(this);" Text="Update" CommandName="Update" />
</EditItemTemplate>
</asp:UpdatePanel>
,而不是4个单独的表。