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

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

= 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"} 

在您的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应用它。 带有GET请求的button_to是一种不好的做法。

试试这个,它应该与您的视图代码一起使用,只需更改为routes.rb即可

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

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

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

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