我有一个简单的控制器,其中包含show
和index
方法。 routes.rb
有一个resources :foo
条目,当我转到localhost:3000/foo
时,即使我在正确的文件夹中有一个missing template
文件,我也会收到index.json.jbuilder
错误当我转到/foo.json
不应该看到rails没有这个特定视图的html模板并自动使用json模板吗?
我正在使用rails 4.2。
答案 0 :(得分:4)
默认情况下,转到localhost:300/foo
将使用:html
格式。由于您没有相应的html视图,因此您将收到缺少模板错误。如果您希望路由默认为:json
,则可以在定义路径时指定它
resources :foo, defaults: {format: :json}
答案 1 :(得分:1)
来自官方documentation:
邮件的下一部分包含哈希。此哈希中的:locale键仅指示应检索哪种口语模板。默认情况下,这是英语 - 或“en” - 模板。 下一个关键字:格式指定要响应的模板格式。默认格式为:html,因此Rails正在寻找HTML模板。最后一个关键字:处理程序告诉我们可以使用哪些模板处理程序来呈现我们的模板。 :erb最常用于HTML模板,:builder用于XML模板,以及:coffee使用CoffeeScript构建JavaScript模板。
这就是Rails无法找到您的.json.jbuilder
视图的原因。因此,在您的情况下,您可以传递正确的Accept
HTTP标头或覆盖请求格式:
before_filter :default_request_format
def default_request_format
request.format = :json
end
或在上面的@Bart Jedrocha描述的路线中指定它。