从父母

时间:2017-05-10 01:04:28

标签: ruby-on-rails ruby activerecord

背景

我希望能够从父类出发,向我展示它拥有的所有孩子,但是孩子可能是一组 指定和已知的,但不同的类

以下是设置示例:

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等。

1 个答案:

答案 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个单独的表。