路由错误 – 使用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'
另外,请注意:
-
使用
path
而不是在助手中指定controller/action
。 -
使用
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。