Rails 3 - 如何创建要存储在数据库中的JSON对象

时间:2010-09-30 21:35:01

标签: ruby-on-rails json ruby-on-rails-3

我正在创建一个可以监视多个模型的AuditLog观察者。

我希望观察者有一个after_create,它创建一个存储在数据库列中的JSON对象。它将包含{photoid:123,photoname:“asdasd”,creator_id:“asdasd”}等数据......

在Rails中,如何创建这种类型的JSON对象,然后如何将其与其他非JSON字段一起插入数据库?

由于

3 个答案:

答案 0 :(得分:62)

当前版本的rails支持开箱即用的json序列化。在迁移中将字段定义为字符串(或文本),然后:

class Foo < ActiveRecord::Base
  serialize :field, JSON
end

bar = Foo.new
bar.field = [1,2,3]
bar.save

答案 1 :(得分:10)

首先,一定要查看ActiveRecord序列化并查看它是否符合您的要求:http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-serialize

但是,如果你需要专门的JSON(序列化默认使用YAML),那么你总是可以手工伪造它。

您可以简单地在Ruby中构建哈希,然后在将其分配给模型属性之前调用to_json

data = { 'photoid' => 123, 'photoname' => "asdasd", 'creator_id' => "asdasd" }
myrecord.stored_data = data.to_json
myrecord.save

答案 2 :(得分:-3)

看看这个:http://github.com/laserlemon/vestal_versions

如果它不是你想要的,它至少会告诉你它已经完成了。