【发布时间】:2014-03-25 13:46:06
【问题描述】:
我正在尝试在 rails 4 中构建 API,但在使用 respond_to :json 并尝试访问 html 版本时遇到了一个问题,即 rails 返回 500 错误而不是 406。
这是一个演示问题的示例控制器:
class PostsController < ApplicationController
respond_to :json
def index
@posts = Post.all
end
end
我还有一个 index 的 jbuilder 视图,它在通过 JSON 访问时有效。如果我尝试在没有 JSON 扩展的情况下访问路由,它会尝试加载 HTML 模板(不存在)并返回 500 错误,而不是仅渲染 JSON 或返回 406 错误。
这可能是什么原因造成的?为任何帮助干杯。
【问题讨论】:
-
我确实看到了,但我想知道为什么它不适用于
respond_to :json设置 -
respond_to :json和respond_with @posts在生产中正确响应 HTTP/1.1 406 Not Acceptable 给我。在开发中,您会收到“HTTP/1.1 500 Internal Server Error”和ActionController::UnknownFormat -
对不起,我试图回答,但我的帖子被版主删除了,因为我还回答了另一个“可能重复”,即使这个更清楚的是 Rails 4。所以你去......在 Rails 4,你必须在路由中传递一个 lambda 来强制执行这样的约束:
resources :posts, constraints: lambda { |req| req.format == :json } -
您可以在 Rails 指南的第二个注释中看到更多信息:edgeguides.rubyonrails.org/…
标签: ruby-on-rails ruby-on-rails-4