【问题标题】:grouping controller in subdirectories for nested resources在嵌套资源的子目录中分组控制器
【发布时间】:2011-09-28 13:21:47
【问题描述】:

我想在子目录中组织我的控制器。这是一个例子:

routes.rb:

resources :locations do
  resources :users
end

我想将我的控制器放在适当的子目录中:

app/controllers/locations/users_controller.rb

并且网址将是(标准):

/locations/1/users
/locations/1/users/new
/locations/1/users/10/edit
...

如果我的路由中有命名空间,我可以将 users_controller.rb 更改为

class Locations::UsersController < LocationsController
end

但它不适用于嵌套资源,而是出现以下错误:

 Routing Error
 uninitialized constant UsersController

更新

如果我添加它会起作用:

resources :locations do
  resources :users
end
match 'locations/:location_id/users' => "locations/users#index"

但我必须为每个操作和嵌套资源添加一个路由...

【问题讨论】:

  • 我不确定你想做什么。 isnt ": resources :locations do resources :users end" 让它工作吗?
  • 不,在子目录中没有找到users_controller.rb...

标签: ruby-on-rails-3 rails-routing


【解决方案1】:

如果您只想使用那一条路线:

match 'locations/:location_id/users' => "locations/users#index"

这应该出现在可能与该匹配项冲突的任何其他资源/匹配项之前。默认情况下,Rails 路由是自上而下的。

# should be before locations resource
resources :locations do
  resources :users
end

或者,如果您想将所有嵌套的users 资源转移到locations/users,您可以为该资源分配一个控制器。

resources :locations do
  resources :users, :controller => "locations/users"
end

【讨论】:

  • 甜蜜。谢谢。找到指南章节:guides.rubyonrails.org/…
  • 有没有办法在不为每个嵌套资源指定 :controller => 'locations' 的情况下做到这一点?假设我有 10 个嵌套资源,这有点麻烦
  • 你找到方法了吗?
【解决方案2】:

人们可以使用模块来拥有嵌套控制器的嵌套路由:

resources :locations do
  scope module: :locations do
    resources :users
  end
end

$ rake 路线

...
location_users GET /locations/:location_id/users locations/users#index
...

【讨论】:

    【解决方案3】:

    正如 Kwon 所说,重要的是顺序。但是你仍然可以使用命名空间。

    .../config/routes.rb

    namespace :locations do
        resources :users
    end
    resources :locations
    

    .../app/controllers/locations_controller.rb:

    class LocationController < ApplicationController
    

    .../app/controllers/locations/users_controller.rb:

    class Locations::UsersController < LocationsController
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2013-02-03
      • 2014-08-15
      相关资源
      最近更新 更多