ruby-on-rails-3 – 嵌套资源子目录中的分组控制器

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

routes.rb中:

resources :locations do
  resources :users
end

我想把我的控制器放在相应的子目录中:

app/controllers/locations/users_controller.rb

并且url将是(标准):

/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"

但是我必须为每个动作和嵌套资源添加路由…

解决方法

如果你想使用那条路线:
match 'locations/:location_id/users' => "locations/users#index"

这可能会在可能与该匹配冲突的任何其他资源/匹配之前发生.默认情况下,Rails路由是顶层的.

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

或者,如果您想将所有嵌套的用户资源转移到位置/用户,您可以将控制器分配给资源.

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

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...