Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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 如何打推杆路线_Ruby On Rails_Routes - Fatal编程技术网

Ruby on rails 如何打推杆路线

Ruby on rails 如何打推杆路线,ruby-on-rails,routes,Ruby On Rails,Routes,在我的一个restfull控制器中,我有一个额外的方法叫做“importdata”。当我实际更改数据(在数据库中导入csv)时,我理解它应该是一个put路由,而不是get路由 起初我有 resource data_set do put 'importdata', on: :method end 我也尝试过的是: put 'data_sets/:id/importdata', "data_sets#importdata' rake routes在这两种情况下都显示了我想要的路线 当我在控制

在我的一个restfull控制器中,我有一个额外的方法叫做“importdata”。当我实际更改数据(在数据库中导入csv)时,我理解它应该是一个put路由,而不是get路由

起初我有

resource data_set do
  put 'importdata', on: :method
end
我也尝试过的是:

put 'data_sets/:id/importdata', "data_sets#importdata'
rake routes在这两种情况下都显示了我想要的路线

当我在控制器中的(第一个示例)路由上使用该方法时,我所做的是

redirect_to import_data_sets_path id: dataset.id
第二个例子是:

redirect_to controller: "data_sets", action: "importdata", id: dataset.id
在这两种情况下,我得到的信息是:

No route matches [GET] "/data_sets/28/importdata"
这是正确的,因为这是一条put路线。我让它工作的唯一方法是将put更改为get:

get 'data_sets/:id/importdata', "data_sets#importdata'
我怎样才能让它在put路线上工作?首先应该是一条put路线吗


谢谢您的时间。

简单地说,您无法“升级”用户发出的HTTP请求。重定向仅用于“工作覆盖”获取。如果用户正在更改某些内容,请通过表单进行更改,并确保在修改现有资源时该请求是PUT请求

如果PUT是有条件的,那么有几个选项,要么在UI中找出解决方法,使用HTTP客户端发出PUT(这对本地调用没有意义),要么在其他类型的类中提取资源的编辑并在控制器中使用它

然而,即使编辑是可选的,让用户首先触发PUT也是更有意义的


希望这能有所帮助。

重新定向到看跌期权不会让唤醒者想到同样的事情。你想通过重定向实现什么?你能告诉我为什么不吗?重定向是在csv字段和内部模型字段之间设置映射后发生的。我只能在具有该映射时导入数据。我很高兴重定向到get路由,我只是想了解为什么重定向到put是错误的,因为我知道当您更改任何内容时,您永远不应该使用get。
put
方法是从用户接收数据,然后触发任何更改数据的调用的方法。重定向是要求用户的浏览器转到其他URL。与刚刚接受CSV数据的URL不同,用户应该在这个新URL上做什么?