首先,我对Rails很陌生,对于模型我有一个相当基本的问题。如何在Rails中创建动态模型?
我有一个名为属性has_many属性的事件模型。我生成了我的Property模型,但是必须定义属性,但是,属性可以根据事件而改变。
实施例:
- 事件A将有4个属性,一个将是一个布尔值和其余的将是字符串。
- 事件B只会有1个整数属性
如何创建一个属性模型的“动态”属性?
感谢您的帮助。
PS:我使用SQLite
首先,我对Rails很陌生,对于模型我有一个相当基本的问题。如何在Rails中创建动态模型?
我有一个名为属性has_many属性的事件模型。我生成了我的Property模型,但是必须定义属性,但是,属性可以根据事件而改变。
实施例:
如何创建一个属性模型的“动态”属性?
感谢您的帮助。
PS:我使用SQLite
如前所述,postgreql有JSON内置的,但如果你使用任何其他数据库,你可以像这样
class Event < ApplicationRecord
serialize :property, JSON
end
与serialization设置你的模型了,然后让解析/自动保存为你完成,不需要混淆你的代码自己做它
Event.create(name: 'Famous Person Concert Thing', property: { artist: 'Someone famous, most likely', kids_allowed: false })
# SQL (0.2ms) INSERT INTO "events" ("name", "property", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["name", "Famous Person Concert Thing"], ["property", "{\"artist\":\"Someone famous, most likely\",\"kids_allowed\":false}"], ["created_at", "2017-07-15 18:47:05.949921"], ["updated_at", "2017-07-15 18:47:05.949921"]]
Event.last.property
# => {"artist"=>"Someone famous, most likely", "kids_allowed"=>false}
这就是我正在寻找的,感谢您的帮助! – gilles
您可以将您的数据在SQLite中字符串列一个序列化的哈希值。通过这种方式,您可以更灵活地存储所存储的数据。 对于json列的更多原生支持,您应该考虑使用postgresql。
只是好奇。为什么你需要动态属性?为什么不能在事件表中存储适当的东西。为每个属性创建列。有些列不会有数据。 – dnsh
添加X列,因为我开始添加属性似乎不是一个好习惯。我宁愿只有一个属性列只有一个JSON。但我仍然不熟悉Postgres和rails的工作。我想知道是否有更简单的方法来做到这一点。 – gilles