2012-06-14 12 views
0

我最近發現與路由和動作相關的導軌中存在一個奇怪的行爲,具體來說,這是在rails 2.3.5。我有一個控制器,我們稱之爲用戶。在路線中,我將用戶聲明爲資源。Rails總是路由動作以顯示動作,而動作自己變成了標識

map.resources :users 

而在控制器內,我有標準動作:index, show, edit, update & destroy。此外,我添加了其他行動滿足某些要求。

def generated_pdf_report 
    # do something 
end 

問題是,當我去/users/generated_pdf_report頁,我得到這個在控制檯上:

Processing UsersController#show (some timestamps) [GET] 
    Parameters: {"action"=>"show", "id"=>"generated_pdf_report", "controller"=>"users"} 

正如你所看到的,服務器將請求路由到方法show,而不是方法generated_pdf_report有趣的是什麼,是我有其他控制器有類似的行動,並工作正常。

解決上述問題是很容易的,確保增加的飼料資源上面:

map.feed 'users/generated_pdf_report', :controller => 'users', :action => 'generated_pdf_report' 
map.resources :users 

我的問題是:任何人都知道爲什麼軌的行爲就像是什麼?上述解決方案有點草率,您認爲上述問題的最佳實踐如何?

回答

0

正如梁2 routing guide概述,您可以添加像這樣收集路線:

map.resources :users, :collection => { :generated_pdf_report => :get } 
0

當軌道着眼於

/users/generate_report 

這正是它會用它來顯示用戶的路徑其ID是generate_report,所以這就是它的作用,假設你還沒有告訴它。

給你寫一個較短的替代方案是

resources :users, :collection => {:generate_report => :get} 

它告訴軌到GET到/用戶/ generate_report映射到generate_report行動