rails视图不默认为json

时间:2015-03-18 17:07:17

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

我有一个简单的控制器,其中包含showindex方法。 routes.rb有一个resources :foo条目,当我转到localhost:3000/foo时,即使我在正确的文件夹中有一个missing template文件,我也会收到index.json.jbuilder错误当我转到/foo.json

时显示的足够

不应该看到rails没有这个特定视图的html模板并自动使用json模板吗?

我正在使用rails 4.2。

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描述的路线中指定它。