2012-01-08 114 views
0

我正在写一个简单的查找,检查数据库中是否存在用户名。到目前为止,事情已经相当简单。不过,我在做我的路由时遇到问题。宁静的路由

目前在我的routes.rb中我有以下几点:

namespace :broker do 
    namespace :userdesk do 
     resources :dashboards do 
     end 
     resources :accounts do  
      get :validateUsername 
     end 
    end 
end 

当我用耙子的路线,我得到validateUsername以下路线: broker_userdesk_account_validateUsername GET /broker/userdesk/accounts/:account_id/validateUsername(.:format) {:action=>"validateUsername", :controller=>"broker/userdesk/accoun ts"}

对于这个动作,我传递的用户名,而不是account_id。是否有修改路由,以便它使用像这样的方式: /broker/userdesk/accounts/:username/validateUsername(.:format)

回答

1

这一切首先似乎并不特别“Railsy”或REST风格的,但你可以定义使用match

match '/broker/userdesk/accounts/:username/validateUsername' => 'broker/userdesk/accounts#validateUsername' 
特定路由

修订

我推荐的导轨导向上路由: http://guides.rubyonrails.org/routing.html

我在示例中忽略了您的命名空间。

如果您在帐户资源中嵌套,则您希望通过帐户而非用户名进行范围限制。

尝试诸如/users/:id/validate之类的东西会更加RESTful。

事实上,如果你正在做的是检查该用户是否存在,你可以打到用户的表演动作和处理404:

resources :users # would give you /users/:id where you would either return a user or a not found (400) 
+0

你能解释一下显得“Railsy”不?我宁愿遵循最佳实践,而采用黑客方法。 – Tempname 2012-01-08 08:12:03

+0

我更新了我的答案 – lebreeze 2012-01-08 08:25:55

+0

我没有检查是否存在特定用户或用户标识。我正在验证用户名是否存在。所以使用show动作并不是真正的选择。该检查是从创建用户表单完成的。一旦用户将注意力集中在用户名字段之外,将执行该检查。 – Tempname 2012-01-08 08:28:53