我正在尝试在 Rails 4 中创建这个 Controller :
Admin::EDMsController
在我的 initializers/inflections.rb 文件中,我定义了首字母缩略词:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'EDMs'
inflect.acronym 'EDM'
end
我的 routes.rb 文件有:
namespace :admin do
# ... some other resources ...
resources :edms
end
而我的 Controller 在app/controllers/admin/edms_controller.rb中定义如下:
class Admin::EDMsController < Admin::AdminController
end
当我尝试访问/admin/edms 时,出现以下错误:
uninitialized constant Admin::EDMsController
到目前为止我发现了什么:
- 如果我将它重命名为 Admin::EdmsController 并删除词形变化定义(即除了首字母缩略词之外一切都一样),它会起作用
- 如果我将整个东西从 admin 命名空间移到我的应用程序的根目录(即 EDMsController,通过/edms 访问),它会起作用
还值得注意的是,我在 admin 命名空间中还有其他 Controller 和资源可以正常工作。
所以看起来我可以有一个首字母缩略词 Controller ,或者一个 namespace 内的 Controller ,但不能同时有两个。
有什么建议吗?
最佳答案
看起来这是一个在 4.2 中修复的错误:https://github.com/rails/rails/pull/14146
如果您无法升级,这应该可行:
irb(main):001:0> ActiveSupport::Inflector.inflections(:en) { |inflect| inflect.acronym 'Admin/EDMs' }
=> /Admin\/EDMs/
irb(main):002:0> 'Admin::EDMsController'.underscore
=> "admin/edms_controller"
关于ruby-on-rails - Rails 4 - 命名空间内的首字母缩写词 Controller 给出 'Uninitialized Constant' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24565516/