2011-12-10 44 views
2

假設我有一個名爲employeesmanager的應用程序,它有一個employees資源,所以/employees/new是一個新員工等。我想要公司名稱在前這個動作,例如ford/employees/new應該在福特創建一個新員工,而exxon/employees/new應該在埃克森創建一個新員工。做這個的最好方式是什麼?Rails - 路由:使用控制器/操作前的子目錄

理想的情況下,我不希望有使用嵌套控制器,/company/exxon/employees/new,因爲這似乎是在URL中額外多餘的話,可以是惱人的輸入

回答

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

這是一個路徑段(字符串),就像「公司/:公司名稱/員工」一樣。除了看起來相似之外,它與ruby符號無關。自己試試! –

0

你可以嘗試水木清華這樣的:

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

在這種情況下,使用GET方法將此路徑的請求傳遞給EmployeesController#new,並在params[:company]中收到公司名稱。

+0

有沒有一個方便的方法來做到這一點,所以我不必每個單獨的路徑都做這樣的設置,仍然可以使用'resource:employees'? – Kvass

+0

我不認爲有一種簡單的方法可以在'resource:employees'生成的默認RESTful路由前添加動態公司名稱。 –