如何在rails数据库中保存JSON响应的值?

时间:2012-02-15 19:05:52

标签: javascript ajax database json ruby-on-rails-3.1

我想访问Facebook Graph API并获得这样的JSON响应:

{
  "data": [
    {
      "name": "Coldplay", 
      "category": "Musician/band", 
      "id": "15253175252", 
      "created_time": "2012-01-27T22:51:44+0000"
    },
    {
      "name": "R.E.M.", 
      "category": "Musician/band", 
      "id": "8759772983", 
      "created_time": "2012-01-27T22:51:43+0000"
    }
  ], 
  "paging": {
    "next": "https://graph.facebook.com/1000032123447/music?format=json&limit=5000&offset=5000&__after_id=8123918"
  }
}

现在我想将名称,类别和ID保存到我的rails数据库中。 我有一张包含相同列的表。

将此响应保存到数据库的匹配列中的最简单方法是什么?或者是否有更好的解决方案,即只是将整个json对象保存到数据库中并稍后再次在代码中读取它?

如果您有时间,请提供javascript / jQuery(可能是ajax)和ruby代码的编码示例。非常感谢你!

1 个答案:

答案 0 :(得分:3)

有关如何将JSON内容从浏览器发送到Rails应用程序的信息,请参阅this question and answer

然后你可以做这样的事情(JSON将被自动解析,并可用作params哈希)。需要注意的一点是,JSON中的id属性将被忽略,因为它默认受保护(Rails使用id作为记录的主键)。最好将其“重命名”为facebook_id

# POST /path/to/collection
def create
  params["data"].each do |data|
    data["facebook_id"] = data["id"]
    SomeRecordClass.create(data)
  end
end

当然,你需要做一些错误检查,发送回复等等。

在浏览器中,如果您使用的是jQuery

,则可以执行此类操作
$.ajax({
  type: "POST",
  url: "/path/to/collection",
  data: data, // the JSON data, as an object or string
  contentType: "application/json",
  dataType: "json"
});