В rout.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, если это не так.Если false, второй маршрут забирает его и отправляет пользователя на страницу входа.
В Scores_controller_test.rb у меня есть:
def test_get_all_athlete_scores
[set up]
get :all_athlete_scores, :id => @user
end
Странная часть заключается в том, что request.filtered_parameters [: full_path] в scores_controller_test - это /me?id=@user.id, а не /scores/athlete/:id'.
Если я изменю route.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_parameters [: full_path] = /scores/athlete/:id.
Полностью сбитый с толку этим - / me не должен совпадать, когда GET сделан для all_athlete_scores.
Есть идеи?