从 JSON 反序列化 ActiveRecord
我想使用 JSON 序列化将查询结果保存到 redis 中并查询回来。
将查询结果获取到 json 非常简单:
JSON.generate(Model.all.collect {|item| item.attributes})
但是我没有找到将其反序列化回 ActiveRecord 的正确方法。最直接的方法:
JSON.parse(@json_string).collect {|item| Model.new.from_json(item)}
给我一个错误:
WARNING: Can't mass-assign protected attributes: id
所以 id 变空。我想只使用 OpenStruct 作为视图而不是 ActiveRecord,但我确信有更好的方法。
I would like to save query result into redis using JSON serialization and query it back.
Getting query results to json is pretty easy:
JSON.generate(Model.all.collect {|item| item.attributes})
However I did not find a proper way to deserialize it back to ActiveRecord. The most straight-forward way:
JSON.parse(@json_string).collect {|item| Model.new.from_json(item)}
Gives me an error:
WARNING: Can't mass-assign protected attributes: id
So id gets empty. I thought of just using OpenStruct for the views instead of ActiveRecord but I am sure there is a better way.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以从 JSON 实例化新对象,然后分配 id。可能最好为此创建自己的方法:
或者可能只是覆盖
from_json()
方法。You could instantiate the new object from JSON and then assign the id afterwards. Probably best to create your own method for this:
Or maybe just override the
from_json()
method.为什么不这样做:
如果创建 JSON 的主机添加 JSON 根,您可能必须使用
item[1]
而不是item
。Why not like this:
If the host that created the JSON adds a JSON root you might have to use
item[1]
instead ofitem
.