Rails关联,嵌套形式和STI

时间:2018-09-20 16:32:20

标签: ruby-on-rails activerecord

这是我的简化模型

class Offer < ApplicationRecord
  has_many :rooms
end

class Room < ApplicationRecord
  belongs_to :offer
end

class Kitchen < Room
end

我将STI用于Kitchen,因为这似乎是表达我想做的事情的正确方法(我可能错了)。

我希望能够创建一个包含房间的商品。我有“常规”房间,这些房间直接是Room的实例,还有更多指定的房间,例如Kitchen,可以具有额外的属性。

我正在使用茧来创建嵌套表格,它非常适合创建报价并添加常规房间。但是我该如何增加厨房?

也许这是体系结构问题,而不是实现问题。您将如何做这样的事情?

1 个答案:

答案 0 :(得分:0)

一种解决方案是将JSONB列data添加到您的rooms表中。然后,您可以使用jsonb_accessor gem优雅地管理STI。

我假设您已经有type列,因此您可以执行以下操作:

Kitchen.create(offer_id: 1, name: "Great Kitchen", description: "It is great!")

注意:description将是JSONB data列的属性。另外,您可以create indices获取JSONB属性,甚至可以进行查询。根据我的经验,您希望将JSONB用作存储其他信息的地方,而对于繁重的查询则较少。

我希望这会有所帮助。