2012-03-29 40 views
2

在routes.rb中,我有:如果用戶登錄,假如果不是一個匹配的路由覆蓋另一個,但不應

[some routes] 

match '/me' => "scores#all_athlete_scores", :constraints => LoggedInChecker 
devise_scope :user do 
    match '/me' => "devise/sessions#new" 
end 

match '/scores/athlete/:id', :to =>"scores#all_athlete_scores", :as => "all_athlete_scores" 

[some more routes] 

LoggedInChecker返回true。如果爲false,則第二個路由將其選中並將用戶發送到登錄頁面。

在scores_controller_test.rb,我有:

def test_get_all_athlete_scores 
    [set up] 
    get :all_athlete_scores, :id => @user 
end 

怪異的部分是,request.filtered_pa​​rameters [:full_path]在scores_controller_test被/[email protected]而非/比分/運動員/ :ID'。

如果更改的routes.rb爲:

[some routes] 

match '/scores/athlete/:id', :to =>"scores#all_athlete_scores", :as => "all_athlete_scores" 

match '/me' => "scores#all_athlete_scores", :constraints => LoggedInChecker 
devise_scope :user do 
    match '/me' => "devise/sessions#new" 
end 

[some more routes] 

測試工作正常,並request.filtered_pa​​rameters [:full_path] = /比分/運動員/:ID。

完全被這個困惑 - /我不應該匹配GET時all_athlete_scores。

任何想法?

回答

2

賈巴爾,

我覺得混亂的事實,你有一個方法,以及一個名爲路線「all_athlete_scores」。

get :all_athlete_scores, :id => @user 

調用方法all_athlete_scores而不是命名路由,這正是您所期望的。

可能應該在該測試中測試該方法的功能,並將路由測試留在另一個測試中。

希望有幫助!

+0

是的,就是這樣。謝謝! – kareem 2012-03-29 23:44:46