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

AnA*_*ice 31 json ruby-on-rails ruby-on-rails-3

我正在创建一个审核多个模型的AuditLog观察器.

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

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

谢谢

Mat*_*lly 62

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

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

bar = Foo.new
bar.field = [1,2,3]
bar.save
Run Code Online (Sandbox Code Playgroud)

  • 可能最好将其定义为文本,否则255个字符的限制可能会导致问题. (20认同)
  • 如果由于某种原因这不起作用(当记录被jsonified时仍然看到诸如`{\"abc \":\"123 \"}之类的东西),可能会出现什么问题? (3认同)

tfe*_*tfe 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
Run Code Online (Sandbox Code Playgroud)

  • `stored_data`是一个示例属性名称.它可以是你想要的任何东西.它还必须由数据库中的文本列支持......这不是魔术.创建迁移以添加它. (3认同)

Cod*_*ama -3

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

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