0

'importdata' と呼ばれる、それ以外の場合は完全なコントローラーの 1 つに追加のメソッドがあります。実際にデータを変更している (データベースに csv をインポートしている) ので、get ではなく put ルートにする必要があることがわかりました。

最初は持っていた

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

私も試したことは次のとおりです。

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

rake routes は、どちらの場合も必要なルートを示しています。

コントローラーで(1番目の例)ルートのメソッドを持っていたときに私がしたことは

redirect_to import_data_sets_path id: dataset.id

2 番目の例では、次のようになります。

redirect_to controller: "data_sets", action: "importdata", id: dataset.id

どちらの場合も表示されるメッセージは次のとおりです。

No route matches [GET] "/data_sets/28/importdata"

これは put ルートなので正しいです。これを機能させる唯一の方法は、get の 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 に答える