Rails 3 - 控制器/查看子目录路由

时间:2012-04-13 17:58:09

标签: ruby-on-rails-3

我将一些控制器分隔成子目录,如:

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)))'

1 个答案:

答案 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接口。