我有以下按钮来下载文件。
= 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"}
答案 0 :(得分:1)
在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应用它。 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。