2012-01-08 16 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ではなくusernameです。 が/broker/userdesk/accounts/:username/validateUsername(.:format)

答えて

1

このすべての最初には、特に「Railsy」を思われないか、RESTfulなしかし、あなたはmatch

match '/broker/userdesk/accounts/:username/validateUsername' => 'broker/userdesk/accounts#validateUsername' 
を使用して特定のルートを定義することができます:それはこのようなものを使用するようにルートを変更する方法はあります http://guides.rubyonrails.org/routing.html

は、私は、ルーティング上のレールガイドをお勧めします

を更新しました。

私の例であなたの名前空間を無視しました。

アカウントリソース内にネストしている場合は、ユーザー名ではなくアカウントによってスコープを設定することになります。

/users/:id/validateのようなものを試してみると、もっと簡単になります。実際に

、あなたがやっているすべてのユーザーが存在する場合は、あなたがユーザのshowアクションをヒットし、404エラーを処理できるチェックしている場合:

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

あなたはそれが「Railsy」は思えないどのように説明できますか?私は、ハック方法を使用するよりベストプラクティスに従うことを好むでしょう。 – Tempname

+0

私の回答を更新しました – lebreeze

+0

特定のユーザーまたはユーザーIDが存在するかどうかを確認することはありません。私はユーザー名が存在するかどうかを確認しています。したがって、showアクションを使用することは実際の選択肢ではありません。このチェックは、ユーザー作成フォームから実行されます。ユーザーがユーザー名フィールドの外にフォーカスすると、このチェックが実行されます。 – Tempname