我在其中一个名为'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路线上工作?它应该是首先放置的路线吗?
感谢您的时间。
答案 0 :(得分:0)
简单地说,您不能'升级'用户发出的HTTP请求。重定向仅适用于GET。如果用户正在通过表单进行更改,请确保在修改现有资源时它是PUT请求。
如果PUT是有条件的,有几个选项,要么弄清楚如何在UI中解决这个问题,使用HTTP客户端发出PUT(对于本地调用没有意义)或者提取资源的编辑在其他类中,并在控制器中使用它。
但是,即使编辑是可选的,让用户首先触发PUT更有意义。
希望有所帮助。