2011-12-21 2 views
1

Я пытаюсь написать спецификацию запроса для пользовательского действия на одном из моих контроллеров.Именованные пользовательские маршруты в rspec

Мой routes.rb как это:

controller :profile, :path => 'profile' do 
    match 'view_friends/:circle_id', :to => :view_friends, :via => [:get], :as => 'view_friends' 
end 
resources :profile 

Я хочу посетить это мероприятие, и в надежде, что я могу использовать

visit profile_path 
visit new_profile_path 
etc 

То, что я мог бы сделать

visit view_friends_profile_path 

Однако это дает мне ошибку «неопределенная локальная переменная или метод»

я могу получить желаемое поведение, написав

visit profile_path.to_s + '/view_friends/' + circle.id.to_s 

Но это ужасно. Что мне не хватает, чтобы назвать пользовательское действие?

редактировать:

Соответствующий выход из рейк маршрутов

view_friends GET  (/:locale)/profile/view_friends/:circle_id(.:format)  {:controller=>"profile", :action=>"view_friends"} 
+0

Запуск маршрутов рейка, чтобы убедиться, что вы используете правильный вспомогательный метод. Возможно, вы могли бы добавить вывод команды к вопросу. – lucapette

+0

Вы могли решить эту проблему? – Batkins

ответ

1

Во-первых, я немного запутался. Обычно в рельсах, когда вы делаете контроллер, контроллер имеет множественное имя. Например, если ваше имя модели Profile, то у вас будет ProfilesController. То, как вы пишете свой вопрос, означает, что ваш контроллер имеет имя ProfileController. Кажется необычным, поэтому, если бы вы могли уточнить, что было бы полезно. При этом попробуйте следующее:

# in routes.rb 
resources :profile do 
    member do 
    match 'view_friends/:circle_id' => :view_friends, :via => :get, :as => 'view_friends' 
    end 
end 

Должен производить то, что вы хотите. Теперь вы можете получить к нему доступ:

view_friends_profile_path(profile_id, circle_id) 
Смежные вопросы