这是我的简化模型
class Offer < ApplicationRecord
has_many :rooms
end
class Room < ApplicationRecord
belongs_to :offer
end
class Kitchen < Room
end
我将STI用于Kitchen,因为这似乎是表达我想做的事情的正确方法(我可能错了)。
我希望能够创建一个包含房间的商品。我有“常规”房间,这些房间直接是Room的实例,还有更多指定的房间,例如Kitchen,可以具有额外的属性。
我正在使用茧来创建嵌套表格,它非常适合创建报价并添加常规房间。但是我该如何增加厨房?
也许这是体系结构问题,而不是实现问题。您将如何做这样的事情?
答案 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用作存储其他信息的地方,而对于繁重的查询则较少。
我希望这会有所帮助。