2012-04-13 120 views
1

我有些控制器分離成像子目錄:導軌3 - 控制器/視圖子目錄路由

app/dept1/user_controller/action 

與控制器此配置:

class Dept1::UserController < ApplicationController 
end 

在軌道2,這是我所需要的做和應用程序能夠自動路由就好。

但在rails 3中,看起來我需要做一些路由配置。

namespace :dept1 do 
    resources :user 
    end 

本頁面拉細:

app/dept1/user_controller/index 

但應用程序/ DEPT1/user_controller /報告返回此錯誤:

"ActionController::RoutingError (No route matches [POST] "/dept1/user/report")" 

做別的什麼我我使用的命名空間嘗試需要配置?

UPDATE:

當我把這個在我的路線,它的工作原理:

namespace :dept1 do 
    resources :user do 
    collection do 
     get :report 
     post :report 
    end 
    end 
end 

有沒有一種方法,我可以做到這一點沒有硬編碼每一個動作?

更多更新:

這是我做了什麼來修復工作路線的權利。它必須是按以下順序:

match ':controller(/:action(/:id))', :controller => /dept1\/[^\/]+/ 
match ':controller(/:action(/:id(.:format)))' 

回答

-1

這是一個功能,迫使你設計你的URL RESTful.But如果你真的想Rails的2路,看到的config/routes.rb中的最後一塊:

# This is a legacy wild controller route that's not recommended for RESTful applications. 
# Note: This route will make all actions in every controller accessible via GET requests. 
# match ':controller(/:action(/:id(.:format)))' 

該評論說,它使GET可訪問,的確它使所有的HTTP動詞可訪問。

對於嵌套資源,我猜你需要嵌套namespace :dept1以上的規則。

但我仍然建議你使用Rails 3的方式,只暴露nessacery接口。

+1

告訴我一些我不知道的東西。 – oprogfrogo 2012-04-13 19:49:28

+0

取消註釋行爲像一個捕獲所有路線#match':controller(/:action(/:id(。:format)))' – 2012-04-14 06:41:17