我不是在问如何使用它们,而是在问它们是如何工作的。我的控制器(刚刚为我的控制器使用了一个脚手架生成器)有一个方法:
def index
@users = User.all
end
通过该方法,我可以获取 html 响应 (index.html.erb),即使没有在请求中指定“html”,也可以获取 json 响应 (index.json.jbuilder)。
在其他方法中,有format.html
和format.json
。在上面的示例方法index
中,没有提到任何一种“类型”的响应。为什么/它是如何工作的?!?
请求 /users - 预期的默认 html
请求 /users.html -- 预期的 html 响应
请求 /users.js - 我取回了 html 内容<body>
(也许这是部分内容?)
我没有在任何地方为 .js 指定模板。
请求 /users.txt - 我收到预期的错误消息:
Missing template users/index, application/index with {:locale=>[:en], :formats=>[:text], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder]}.
请求 /users.xml - 我收到了预期的错误消息,即使 xml 看起来比主要资源的 .js 处理程序更实用:
Missing template users/index, application/index with {:locale=>[:en], :formats=>[:xml], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder]}
为什么要处理 .abc 的请求?即使它没有表明它是 html,但它就是这样处理它的。
Started GET "/users.abc" ...
Processing by UsersController#index as
我看到有 :handlers 指定,但没有指定如何/什么应该处理 .js 请求。为什么 .js 请求没有吐出错误?见鬼,这一切在没有 respond_to 块的情况下如何工作?我想我希望默认情况下会使用 html 处理程序,但默认情况下我不希望 .json 响应。通常情况下,我希望能够返回各种格式,有时我宁愿只使用 .json 响应而不是 html 响应。如何/在哪里可以找到处理此问题的文档?它与respond_to 块并没有真正的关系,因为即使没有respond_to,我也会得到多格式输出。