我将一些控制器分隔成子目录,如:
app/dept1/user_controller/action
在控制器中使用此配置:
class Dept1::UserController < ApplicationController
end
在rails 2中,这就是我需要做的全部,应用程序能够自动路由就好了。
但是在rails 3中,似乎我需要做一些路由配置。我尝试过使用名称空间:
namespace :dept1 do
resources :user
end
这页很好:
app/dept1/user_controller/index
但app / dept1 / user_controller / report会返回此错误:
"ActionController::RoutingError (No route matches [POST] "/dept1/user/report")"
我还需要配置什么?
更新:
当我把它放在我的路线中时,它可以工作:
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)))'
答案 0 :(得分:-1)
强制您设计URL RESTful是一个功能。但如果您真的需要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接口。