路由错误 - 使用button_to和自定义操作时没有路由匹配

时间:2012-09-29 05:31:30

标签: ruby-on-rails

我有以下按钮来下载文件。

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

我在MoviesController下有一个download方法,就像这样

# movies_controller.rb
def download
  …
end

但是,我收到以下错误。知道如何解决这个问题吗?

Routing Error

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

3 个答案:

答案 0 :(得分:1)

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_to请求使用GET,如果需要链接按钮样式,请通过CSS应用它。 button_to请求GET是一种不好的做法。

答案 1 :(得分:1)

试试这个,它应该适用于您的视图代码,只需更改为 routes.rb

resources :movies do
    get :download, :on => :collection
end

答案 2 :(得分:0)

或者,如果你想指定控制器/动作(它有优势,因为它允许你通过任意参数),你还需要显式传递动作所依赖的任何参数(假设你正在尝试下载个人电影,而不是整个集合。

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

另外,同样是Mikhail D关于使用link_to进行“获取”请求的观点。明确定义方法非常适合将请求发送到“更新”操作(通过设置方法:: patch或method :: puts),但对于“获取”只需使用link_to。