respond_to块总是呈现html

时间:2016-03-04 23:06:47

标签: ruby-on-rails ruby json activerecord

到目前为止,我的团队已经使用HTTP请求在我们的项目中创建和修改特定的ActiveRecord对象。相关的控制器方法只呈现为json:

render json: { json: 'goes here' }

我正在创建一个基本的CRUD接口来执行此操作,它应该呈现HTML页面(render :html)但是,我们还有一个辅助API,它依赖于能够通过HTTP调用这些控制器操作请求并获得json回复。

我尝试使用respond_to块进行如下操作:

respond_to do | format |
    format.json { render json: { json: 'goes here' } }
    format.html # Appropriate view
end

但是,即使使用直接HTTP请求(在终端中使用cURL进行测试),我总会得到一个HTML响应。我已尝试在路由文件中使用constraint,但即使这样也无法获得JSON响应。

为了从HTTP请求获取JSON响应,还是在服务器端或客户端上还需要做些什么,同时在请求来自表单时仍然呈现适当的视图?谢谢!

2 个答案:

答案 0 :(得分:2)

如果您查看rake routes的输出,那么您会看到所有URI都有这个(.format)后缀。 parens意味着它是可选的。如果没有提供(如果Accept标题没有消除请求的歧义),则Rails默认使用HTML进行响应。

所以在你的cURL命令中只提供.json格式,Rails会回答正确的事情:

curl localhost:3000/foos.json

答案 1 :(得分:1)

如果你想执行特定的格式,例如json,那么你需要在请求来源的参数中传递它,并使用键值:format

whatever_path(format: :json)