使用Ruby on Rails将对象和嵌套对象映射到模型

时间:2013-05-09 19:26:55

标签: ruby-on-rails json activerecord

我有像

这样的对象
{"Result":[{
    "Links":[{
            "UrlTo":"http://www.example.com/",
            "Visited":1364927598,
            "FirstSeen":1352031217,
            "PrevVisited":1362627231,
            "Anchor":"example.com",
            "Type":"Text",
            "Flag":[],
            "TextPre":"",
            "TextPost":""
        }],
    "Index":0,
    "Rating":0.001416,
    "UrlFrom":"http://www.exampletwo.com",
    "IpFrom":"112.213.89.105",
    "Title":"Example title",
    "LinksInternal":91,
    "LinksExternal":51,
    "Size":5735
}]}

我有一个带有所有按键的模型。

UrlTo,Visited,FirstSeen,PrevVisited,Anchor,Type,TextPre,TextPost,Index,Rating,UrlFrom,IpFrom,Title,LinksInternal,LinksExternal,Size

我理解如何在没有这一点的情况下将其保存到数据库中......

"Links":[{
            "UrlTo":"http://example.com/",
            "Visited":1364927598,
            "FirstSeen":1352031217,
            "PrevVisited":1362627231,
            "Anchor":"example.com",
            "Type":"Text",
            "Flag":[],
            "TextPre":"",
            "TextPost":""
        }],

不确定如何使用嵌套对象保存它。

我在Google和SO上搜索过,找不到任何东西,这样做的正确方法是什么?我应该将嵌套对象移动到上面的对象中吗?我没有必要嵌套......

提前致谢

1 个答案:

答案 0 :(得分:0)

看起来你想要保存链接,所以我会在提供的json中循环结果/链接,并根据链接创建一个新的哈希。

我在下面假装你的json在一个名为input.json的文件中 - 但你显然只是解析文本或使用现有的JSON对象

require 'json'
json = JSON.parse File.read("input.json")

links = json["Result"].map do |result|
  result["Links"].map {|link| link }
end.flatten

hash = {"Links" => links}
puts hash

这会创建对象:

{"Links"=>[{"UrlTo"=>"http://www.example.com/", "Visited"=>1364927598, "FirstSeen"=>1352031217, "PrevVisited"=>1362627231, "Anchor"=>"example.com", "Type"=>"Text", "Flag"=>[], "TextPre"=>"", "TextPost"=>""}]}