1

我想使用 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 来查看视图,但我相信有更好的方法。

4

2 回答 2

8

您可以从 JSON 实例化新对象,然后分配 id。可能最好为此创建自己的方法:

class Model
  def self.from_json_with_id(params = {})
    params = JSON.parse(params)
    model = new(params.reject {|k,v| k == "id"})
    model.id = params["id"]
    model
  end
end

或者也许只是覆盖该from_json()方法。

于 2012-06-18T10:55:46.847 回答
1

为什么不这样:

JSON.parse(@json_string).each do |item|
     item.delete(:id) # I tested it in my case it also works without this line
     object=Model.create(item)
end

如果创建 JSON 的主机添加了 JSON 根,您可能必须使用item[1]而不是item.

于 2011-10-24T18:16:08.500 回答