1

我将一些控制器分离到子目录中,例如:

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

1 回答 1

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

于 2012-04-13T18:49:50.970 回答