Rails命名空间路由在开发中有效,但在生产中无效



我正在尝试在名称空间account下嵌套一些路由。

我想要像/account/users/account/users/5/edit 这样的帐户下的用户管理

在路线上。rb:

namespace :account do
  resources :users do
    member do
      put 'generate_api_key'
    end 
    collection do
      post 'api_key'
    end 
  end 
end 

我的控制器没有命名空间,也没有将它们放在任何不同的目录中。

/app
  /controllers
    accounts_controller.rb
    users_controller.rb

在我的开发环境中,这很好,但在生产中,我对任何/account/users...路径都得到了404个响应(顺便说一句,这些路径仍然正确生成:new_account_users_pathedit_account_user_path等)。

CCD_ 6在两种环境中产生相同的输出。这是相关的比特:

 generate_api_key_account_user PUT    /account/users/:id/generate_api_key(.:format)                      {:action=>"generate_api_key", :controller=>"account/users"}
         api_key_account_users POST   /account/users/api_key(.:format)                                   {:action=>"api_key", :controller=>"account/users"}
                 account_users GET    /account/users(.:format)                                           {:action=>"index", :controller=>"account/users"}
                               POST   /account/users(.:format)                                           {:action=>"create", :controller=>"account/users"}
              new_account_user GET    /account/users/new(.:format)                                       {:action=>"new", :controller=>"account/users"}
             edit_account_user GET    /account/users/:id/edit(.:format)                                  {:action=>"edit", :controller=>"account/users"}
                  account_user GET    /account/users/:id(.:format)                                       {:action=>"show", :controller=>"account/users"}
                               PUT    /account/users/:id(.:format)                                       {:action=>"update", :controller=>"account/users"}
                               DELETE /account/users/:id(.:format)                                       {:action=>"destroy", :controller=>"account/users"}

考虑到路由似乎在/account子目录中查找Users控制器,我想我的问题是为什么这在开发中有效?

产量为:

  • 轨道3.0.7
  • 乘客
  • Apache

发展是:

  • 轨道3.0.7
  • Mongrel

谢谢你对这个的思考。

如果您这样命名,Rails要求控制器位于其正确的路径,例如app/controllers/account/users_controller.rb。如果你不想这样做,那么用scope代替:

scope :path => "account" do
  resources :users
end

最新更新