在rspec中命名自定义路由

时间:2011-12-21 13:47:26

标签: ruby-on-rails ruby-on-rails-3 rspec routes

我正在尝试在我的某个控制器上编写自定义操作的请求规范。

我的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"}

1 个答案:

答案 0 :(得分: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)