如何击中放置路线

时间:2013-02-14 19:50:24

标签: ruby-on-rails routes

我在其中一个名为'importdata'的restfull控制器中有一个额外的方法。由于我实际上正在更改数据(在数据库中导入csv),我理解它应该是put路由而不是get。

最初我有

resource data_set do
  put 'importdata', on: :method
end

我也尝试过:

put 'data_sets/:id/importdata', "data_sets#importdata'

rake路线显示了我想要的路线。

当我在控制器中使用(第一个示例)路径上的方法时,我做了什么

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"

哪个是正确的,因为它是一个放置路线。我让它工作的唯一方法是改变get的放置:

get 'data_sets/:id/importdata', "data_sets#importdata'

我怎样才能让它在put路线上工作?它应该是首先放置的路线吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

简单地说,您不能'升级'用户发出的HTTP请求。重定向仅适用于GET。如果用户正在通过表单进行更改,请确保在修改现有资源时它是PUT请求。

如果PUT是有条件的,有几个选项,要么弄清楚如何在UI中解决这个问题,使用HTTP客户端发出PUT(对于本地调用没有意义)或者提取资源的编辑在其他类中,并在控制器中使用它。

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

希望有所帮助。