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'

此外,同上 Mikhail D 关于将 link_to 用于“获取”请求的观点。显式定义方法非常适合向“更新”操作发送请求(通过设置方法::patch 或方法::puts),但对于“获取”,只需使用 link_to。

于 2014-04-03T13:25:47.970 回答