2011-12-10 10 views
2

私はemployeesmanagerというアプリケーションを持っていて、employeesリソースを持っているとします。したがって、/employees/newは新しい従業員です。先行する会社の名前たとえば、ford/employees/newはfordで新しい従業員を作成し、exxon/employees/newではexxonで新しい従業員を作成する必要があります。これを行う最善の方法は何ですか?Rails - ルーティング:コントローラ/アクションの前にサブディレクトリを使用

それが入力するいらいらすることができURL内の余分な無駄な言葉のように思えるので、理想的には、私は/company/exxon/employees/newでネストされたコントローラを使用する必要がありますする必要はありません

答えて

4
scope ":company_name" do 
    resources :employees 
end 

詳細については、Rails Guides on routingを参照してください。

+1

また、 ':constraints => {:company_name =>/[a-z \ d _ \ - ] +/i}' regexpを 'scope'呼び出しに追加することによって、このクエリに一致するパラメータを制限することができます。ルートの順序に注意してください。 –

+0

":company_name"の前後に引用符は必要ありません。 – newUserNameHere

+0

これは "companies /:company_name/employees"のようなパスセグメント(文字列)です。これは、ルビーのシンボルに類似しているとは別に、関連していません。自分で試してみてください! –

0

あなたはそのようになめらかに試すことができます。

get "/:company/employees/new" => "employees#new" 

この場合、このパスへのGETメソッドのリクエストはEmployeesController#newに、params[:company]には企業名が渡されます。

+0

これを行う便利な方法はありますので、すべての単一パスでこの設定を行う必要はなく、 'resource:employees'も使用できますか? – Kvass

+0

'resource:employees'によって生成されたデフォルトのRESTfulルートの前に、その動的な会社名を簡単に追加する方法はないと思います。 –

関連する問題