2017-07-15 61 views
0

首先,我对Rails很陌生,对于模型我有一个相当基本的问题。如何在Rails中创建动态模型?

我有一个名为属性has_many属性的事件模型。我生成了我的Property模型,但是必须定义属性,但是,属性可以根据事件而改变。

实施例:

  • 事件A将有4个属性,一个将是一个布尔值和其余的将是字符串。
  • 事件B只会有1个整数属性

如何创建一个属性模型的“动态”属性?

感谢您的帮助。

PS:我使用SQLite

+0

只是好奇。为什么你需要动态属性?为什么不能在事件表中存储适当的东西。为每个属性创建列。有些列不会有数据。 – dnsh

+0

添加X列,因为我开始添加属性似乎不是一个好习惯。我宁愿只有一个属性列只有一个JSON。但我仍然不熟悉Postgres和rails的工作。我想知道是否有更简单的方法来做到这一点。 – gilles

回答

1

如前所述,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} 
+0

这就是我正在寻找的,感谢您的帮助! – gilles

0

您可以将您的数据在SQLite中字符串列一个序列化的哈希值。通过这种方式,您可以更灵活地存储所存储的数据。 对于json列的更多原生支持,您应该考虑使用postgresql

Parsing and saving hashes with sqlite