Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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路由接受http和json请求_Ruby On Rails_Ruby_Json_Rest - Fatal编程技术网

Ruby on rails Rails路由接受http和json请求

Ruby on rails Rails路由接受http和json请求,ruby-on-rails,ruby,json,rest,Ruby On Rails,Ruby,Json,Rest,我正在使用rails创建一个RESTAPI,我有一个与路由和如何接受api请求相关的简单问题 在我的路由文件中,我有以下代码: namespace :api do namespace :v1 do resources :productOp, :path => "product", :defaults => { :format => 'json' } end end 使用此代码,如果我转到web浏览器中的url: http://localhost:300

我正在使用rails创建一个RESTAPI,我有一个与路由和如何接受api请求相关的简单问题

在我的路由文件中,我有以下代码:

namespace :api do
   namespace :v1 do
      resources :productOp, :path => "product", :defaults => { :format => 'json' }
   end
end
使用此代码,如果我转到web浏览器中的url:

http://localhost:3000/api/v1/product
它工作正常。另一方面,它只接受json格式的post

如果我删除“:defaults=>{:format=>'json'}”我无法在web浏览器中打开相同的url,我会收到一条406HTTP消息,因为它试图查找我的#索引HTML

有人能为我解释一下当我删除“:defaults=>{:format=>'json'}”时为什么会发生这种情况吗? 我如何制作一个接受http post请求和json的API


只是为了添加信息,我的控制器总是以json格式响应,因为我在第一行的控制器“respond\u to:json”中包含了这种格式。

当您在那里有默认哈希值时,您告诉rails在默认情况下将请求设置为json,不管您是否指定它。通过删除它,rails不会这样做,因此当您尝试自己导航到该页面时,rails将假定它是一个HTML请求,如果您不处理它,它将失败

忘记了

在控制器操作中,您可能没有告诉rails它也可以返回HTML。如果它只返回JSON,那么rails不能正常工作是正确的,但请注意,它并不是说找不到它,而是得到了406而不是404

尝试以下方法:

respond_to do |format|
  format.json { render json: @whatever }
  format.html {}
end

然后html将简单地呈现您的索引视图,json请求将返回json中您想要的任何内容当您在那里有默认哈希时,您告诉rails在默认情况下将请求设置为json,不管您是否指定它。通过删除它,rails不会这样做,因此当您尝试自己导航到该页面时,rails将假定它是一个HTML请求,如果您不处理它,它将失败

忘记了

在控制器操作中,您可能没有告诉rails它也可以返回HTML。如果它只返回JSON,那么rails不能正常工作是正确的,但请注意,它并不是说找不到它,而是得到了406而不是404

尝试以下方法:

respond_to do |format|
  format.json { render json: @whatever }
  format.html {}
end

然后html将简单地呈现您的索引视图,json请求将返回json中您想要的任何内容

您的操作是什么样子的?您的操作是什么样子的?谢谢,但它不起作用,如果我这样做,我会收到一条模板丢失消息。。。当我执行请求时,它试图查看views文件夹,而不是在执行标准URL请求时显示正确的JSON。这样做将导致rails假定您需要HTML,并触发
format.HTML
。如果您想运行URL请求并获取JSON,那么只需请求URL
http://localhost:3000/api/v1/product.json
您应该取回JSON:)谢谢,但它不起作用,如果我这样做,我会收到一条缺少模板的消息。。。当我执行请求时,它试图查看views文件夹,而不是在执行标准URL请求时显示正确的JSON。这样做将导致rails假定您需要HTML,并触发
format.HTML
。如果您想运行URL请求并获取JSON,那么只需请求URL
http://localhost:3000/api/v1/product.json
您应该取回JSON:)