Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails视图未默认为json_Ruby On Rails_Json_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails rails视图未默认为json

Ruby on rails rails视图未默认为json,ruby-on-rails,json,ruby-on-rails-4,Ruby On Rails,Json,Ruby On Rails 4,我有一个带有show和index方法的简单控制器routes.rb有一个resources:foo条目,当我转到localhost:3000/foo时,我会得到一个缺少模板的错误,即使我在正确的文件夹中有一个index.json.jbuilder文件,当我转到/foo.json rails不应该看到这个特定视图没有html模板并自动使用json模板吗 我正在使用rails 4.2。转到localhost:300/foo默认情况下将使用:html格式。由于没有相应的html视图,因此将出现缺少模板

我有一个带有
show
index
方法的简单控制器
routes.rb
有一个
resources:foo
条目,当我转到
localhost:3000/foo
时,我会得到一个
缺少模板的错误,即使我在正确的文件夹中有一个
index.json.jbuilder
文件,当我转到
/foo.json

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


我正在使用rails 4.2。

转到
localhost:300/foo
默认情况下将使用
:html
格式。由于没有相应的html视图,因此将出现缺少模板错误。如果希望路由默认为
:json
,可以在定义路由时指定它

resources :foo, defaults: {format: :json}

默认情况下,转到
localhost:300/foo
将使用
:html
格式。由于没有相应的html视图,因此将出现缺少模板错误。如果希望路由默认为
:json
,可以在定义路由时指定它

resources :foo, defaults: {format: :json}
来自官方:

消息的下一部分包含一个散列。此散列中的:locale键仅指示应检索的口语模板。默认情况下,这是英文或“en”模板下一个键,:formats指定响应中要提供的模板的格式。默认格式为:html,因此Rails正在查找html模板。最后一个键:handlers告诉我们可以使用哪些模板处理程序来呈现模板。:erb最常用于HTML模板,:builder用于XML模板,:coffee使用CoffeeScript构建JavaScript模板

这就是为什么Rails找不到您的
.json.jbuilder
视图。因此,在您的情况下,您可以传递正确的
Accept
HTTP头或覆盖请求格式:

before\u过滤器:默认\u请求\u格式
def默认请求格式
request.format=:json
终止
或者在上面描述的@Bart Jedrocha路线中指定它。

来自官方:

消息的下一部分包含一个散列。此散列中的:locale键仅指示应检索的口语模板。默认情况下,这是英文或“en”模板下一个键,:formats指定响应中要提供的模板的格式。默认格式为:html,因此Rails正在查找html模板。最后一个键:handlers告诉我们可以使用哪些模板处理程序来呈现模板。:erb最常用于HTML模板,:builder用于XML模板,:coffee使用CoffeeScript构建JavaScript模板

这就是为什么Rails找不到您的
.json.jbuilder
视图。因此,在您的情况下,您可以传递正确的
Accept
HTTP头或覆盖请求格式:

before\u过滤器:默认\u请求\u格式
def默认请求格式
request.format=:json
终止

或者在上面描述的@Bart Jedrocha路由中指定它。

Rails不会这样看。必须明确指定格式。该文件将呈现为的所有格式。默认情况下,由于文件扩展名的原因,文件
index.json.jbuilder
将仅用于json请求调用。否则rails会抛出一个模板错误。如果你想为所有格式呈现相同的文件,你可以像
render'index.json.jbuilder',:formats=>[:html,:xml,:js,:json]
。rails不会这么看。必须明确指定格式。该文件将呈现为的所有格式。默认情况下,由于文件扩展名的原因,文件
index.json.jbuilder
将仅用于json请求调用。否则rails将抛出模板错误。如果要为所有格式呈现相同的文件,可以执行以下操作:
render'index.json.jbuilder',:formats=>[:html,:xml,:js,:json]