如何在Rails中创建动态模型?

时间:2017-07-15 14:01:24

标签: ruby-on-rails

首先,我对Rails很新,我对模型有一些相当基本的问题。

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

示例:

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

如何使用“动态”属性创建属性模型?

感谢您的帮助。

Ps:我正在使用SQLite

2 个答案:

答案 0 :(得分:1)

如上所述,postgreql内置了JSON,但是如果您使用的是其他任何数据库,则可以使用serialization设置您的模型

class Event < ApplicationRecord
  serialize :property, JSON
end

然后为您自动完成解析/保存,无需在您自己的代码上混乱代码

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}

答案 1 :(得分:0)

您可以将数据作为序列化哈希存储在sqlite的字符串列中。这样,您可以更灵活地处理存储的数据类型。 要获得对json列的更多本机支持,您应该考虑使用postgresql

Parsing and saving hashes with sqlite