将JSON数组转换为ActiveRecord模型数组?

4
我有一个JSON字符串数组。如何将它们转换为Activerecord模型数组?我的当前代码看起来像这样,我不想一个一个地迭代它:
jsons = ['{"id": 1, "field1" : "value1"}'] #this is an array of jsons
models = [] #i want an array of models back

jsons.each do |json|
            if(json == nil)
                next
            end

            begin
                hash = JSON.parse(json)
            rescue
                next
            end

            model = className.new
            model.attributes = hash
            model.id = hash["id"]
            models << model
end

3
这份数据既不符合有效的JSON格式,也不是Ruby Hash。 - Billy Chan
1个回答

3

你应该做如下事项:

models = jsons.compact.map { |json| Klass.new(JSON.parse(json)) }

其中KlassActiveRecord模型类

编辑

根据评论,您不想批量分配ID,这可能会变得混乱,最好让Rails为您生成它,非批量分配是:

models = jsons.compact.map { |json| Klass.new(JSON.parse(json).except(:id, "id")) }

:id, "id"是因为我不确定解析后的JSON使用符号还是字符串作为键。


修复JSON格式后,这段代码应该可以工作。但我相当确定id属性不可批量赋值。你可能需要像这样的代码:Klass.new(JSON.parse(json)) { |m| m.id = json.id } - maček
@maček 我可以通过在我的模型类中放置attr_accessible :id来解决这个问题,对吗? - Henley
@HenleyChiu 大量分配ID不是一个好主意,最好让Rails为您生成它。因此,我已经更新了我的答案来揭示这一点。 - bjhaid
JSON中也有ID,我希望转换后的模型也有相同的ID。你的代码可以实现这一点吗?我已经测试过了,似乎没有填写ID。 - Henley
@HenleyChiu,你可以使用我在之前评论中提到的块来填充id。 - maček
@HenleyChiu 你需要确定 JSON 中的 ID 始终是唯一的,并且在数据库中以前没有选择过,并且它不为 nil。 - bjhaid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接