ruby-on-rails - Rails 关联、嵌套表单和 STI
问题描述
这是我的简化模型
class Offer < ApplicationRecord
has_many :rooms
end
class Room < ApplicationRecord
belongs_to :offer
end
class Kitchen < Room
end
我在厨房使用 STI,因为它似乎是表达我想做的事情的正确方式(我可能错了)。
我希望能够创建包含房间的优惠。我有“常规”房间,它们直接是 Room 的实例,还有更多指定的房间,例如可以具有额外属性的 Kitchen。
我正在使用 cocoon 创建嵌套表单,它可以很好地创建报价并添加常规房间。但是我怎样才能添加厨房呢?
也许这是一个架构问题而不是实现问题。你将如何设法做这样的事情?
解决方案
一种解决方案是将 JSONB 列添加data
到您的rooms
表中。然后你可以使用jsonb_accessor gem 优雅地管理 STI。
我假设您已经有type
专栏,因此您可以执行以下操作:
Kitchen.create(offer_id: 1, name: "Great Kitchen", description: "It is great!")
注意:description
将是 JSONBdata
列的属性。此外,您可以为 JSONB 属性创建索引,甚至可以进行查询。根据我的经验,您希望将 JSONB 作为存储附加信息的地方,而不是用于繁重查询的地方。
我希望这有帮助。
推荐阅读
- excel - 创建一个新工作表并在摘要工作表中超链接该工作表
- python - Keras 中多个输入的多个损失函数
- magento - 客户 group_id 自行更改
- python - 无法理解函数的运行时复杂性
- ember.js - Ember store.findAll 正在重新加载视图,而 store.query 不是
- forms - Vuex 状态已更新,但使用 v-model 时输入值未更新
- javascript - 处理虚拟键盘弹出
- r - 在 RMarkdown 上使用附录时包括引用和参考
- python - 按主题提取关键词
- p5.js - 在 p5 中,仅在单击画布时使用 mouseClicked() 函数