0

我在一个名为“importdata”的其他restfull控制器中有一个额外的方法。因为我实际上是在更改数据(在数据库中导入 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 以获得:

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

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

谢谢你的时间。

4

1 回答 1

0

简而言之,您不能“升级”用户发出的 HTTP 请求。重定向仅适用于 GET。如果用户正在更改某些内容,请通过表单执行此操作,并在您修改现有资源时确保它是 PUT 请求。

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

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

希望有帮助。

于 2013-02-14T20:08:48.483 回答