2012-01-08 80 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