2012-09-29 76 views
0

我有以下按鈕來下載文件。路由錯誤 - 使用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"} 

回答

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_toGET請求,如果您需要鏈接按鈕樣式通過CSS應用它。 button_toGET請求是不好的做法。

1

試試這個,它應該與您的視圖代碼的工作只是變成的routes.rb

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

我認爲它應該是':on =>:member',因爲它不是一個集合。 – Martin

0

另外,如果要指定控制器/動作(這方面具有優勢,因爲它允許你需要通過任意參數傳遞),你還需要顯式地傳遞任何依賴於動作的參數(假設你試圖下載一個單獨的電影,而不是整個集合)。

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

此外,同樣,米哈伊爾D關於使用link_to作爲「get」請求的觀點。明確定義方法對於發送請求到「更新」操作(通過設置方法::patch或method :: puts)是很好的,但對於「gets」只需使用link_to。

相關問題