【问题标题】:Convert array of JSON to array of Activerecord models?将 JSON 数组转换为 Activerecord 模型数组?
【发布时间】:2014-02-08 19:48:17
【问题描述】:

我有一个 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

【问题讨论】:

  • 数据既不是有效的 JSON 也不是 Ruby Hash。

标签: ruby-on-rails ruby json activerecord


【解决方案1】:

你应该这样做:

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

其中KlassActiveRecord model class

编辑

基于 cmets,你不想批量分配 ID,它真的会变得笨拙,最好让 rails 为你生成它,非批量分配是:

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

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

【讨论】:

  • 在将 JSON 修复为实际为 JSON 之后,这可以工作。不过,我很确定 id 属性不是可批量分配的。你可能需要Klass.new(JSON.parse(json)) { |m| m.id = json.id }
  • @maček 我可以通过将 attr_accessible :id 放在我的模型类中来解决这个问题,对吧?
  • @HenleyChiu 批量分配 id 不是一个好主意,最好让 Rails 为您生成它,所以我更新了答案以揭示这一点
  • JSON 也有 ID,我希望转换后的模型具有相同的 ID。你的代码能做到吗?我测试了一下,好像没有填id。
  • @HenleyChiu,您可以使用我在之前评论中提到的块填充 id。
猜你喜欢
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 2018-12-08
  • 2013-06-24
相关资源
最近更新 更多