Rails控制器接受json POST请求

时间:2015-11-28 17:18:50

标签: ruby-on-rails json ruby-on-rails-4

如何设置我的rails项目以接受json HTTP POST请求?我是rails的初学者并尝试了不同的东西,但无法捕获任何数据。到目前为止,这是我的控制器方法。

def flowplayer_callback
    pars = params[:video]
end

我在routes.rb文件中有这个:

post "flowplayer_callback" => "videos#flowplayer_callback", :via => [ :post]

传入的json看起来与此相似:

{"video": { "id": 85067, "seconds": 48, "failed": 0, "encodings": [{ "id": 263445, "duration": 23 }, { "id": 263446, "duration": 23 }] }

编辑:我的问题是设计宝石尝试在之前的操作中验证用户。

2 个答案:

答案 0 :(得分:8)

如果请求的Content-Type标头设置为application/json,Rails会自动将参数加载到params哈希中。在这里阅读更多相关信息:

http://edgeguides.rubyonrails.org/action_controller_overview.html#json-parameters

此外,除非您已禁用它,否则您将使用强参数阻止任何您不允许的内容。

您应该允许您愿意接受控制器操作中的内容(或者如果您需要在多个位置允许它们,请设置私有方法,例如创建和更新方法):

def flowplayer_callback
  pars = params.require(:video).permit(:id, :seconds, encodings: [:id, :duration])
end

我不确定你的:failed部分数据是怎么回事,因为你的哈希值有点破碎。但是,你应该了解你需要做什么。

在此处详细了解强参数 - http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters

答案 1 :(得分:0)

可能需要在发出请求之前设置正确的标头,以便rails控制器接受json响应。

Content-Type: application/json
Accept: application/json

此SO响应包含更多详细信息https://stackoverflow.com/a/4914925