1

ファイルをダウンロードするための次のボタンがあります。

= button_to 'download', action: 'download', method: 'get'

そして、downloadこのような MoviesController の下にメソッドがあります

# movies_controller.rb
def download
  …
end

ただし、次のエラーが発生します。これを解決する方法はありますか?

Routing Error

No route matches {:action=>"download", :method=>"get", :controller=>"movies"}
4

3 に答える 3

3

あなたのroutes.rb

resources :movies do
  get 'download', on: :member
end

ここで、ビューで、ダウンロードする映画を指定する必要があります。

= button_to 'download', download_movie_path(@movie), method: 'get'

また、次の点に注意してください。

  1. ヘルパーpathで指定する代わりに使用します。controller/action

  2. リクエストに使用link_toGET、ボタン スタイルのリンクが必要な場合は、CSS を介して適用します。button_towith GETrequest は悪い習慣です。

于 2012-09-29T05:57:39.750 に答える
1

これを試してみてください。ビュー コードで動作するはずです。routes.rbに変更するだけです。

resources :movies do
    get :download, :on => :collection
end
于 2012-09-29T06:39:47.863 に答える
0

または、コントローラー/アクションを指定する場合 (任意のパラメーターを通過できるため、利点があります)、アクションが依存するパラメーターも明示的に渡す必要があります (個々の映画であり、コレクション全体ではありません)。

button_to 'download', {controller: 'movies', action: 'download', id: movie.id }, method: 'get'

また、「get」リクエストに link_to を使用することについての Mikhail D のポイントも同じです。メソッドを明示的に定義することは、(method: :patch または method: :puts を設定することによって) "update" アクションにリクエストを送信するのに最適ですが、"gets" には link_to を使用するだけです。

于 2014-04-03T13:25:47.970 に答える