Rails 4 - 命名空间中的缩略词控制器给出"未初始化的常量"错误

Cam*_*tin 5 ruby ruby-on-rails ruby-on-rails-4

我正在尝试在Rails 4中创建此控制器:

Admin::EDMsController
Run Code Online (Sandbox Code Playgroud)

在我的initializers/inflections.rb文件中,我已经定义了首字母缩略词:

ActiveSupport::Inflector.inflections(:en) do |inflect|
   inflect.acronym 'EDMs'
   inflect.acronym 'EDM'
end
Run Code Online (Sandbox Code Playgroud)

我的routes.rb文件有:

namespace :admin do
  # ... some other resources ...
  resources :edms
end
Run Code Online (Sandbox Code Playgroud)

我的控制器在app/controllers/admin/edms_controller.rb中定义如下:

class Admin::EDMsController < Admin::AdminController
end
Run Code Online (Sandbox Code Playgroud)

当我尝试访问/ admin/edms时,出现以下错误:

uninitialized constant Admin::EDMsController
Run Code Online (Sandbox Code Playgroud)

到目前为止我发现了什么:

  • 如果我将它重命名为Admin :: EdmsController并删除变形定义(即除了缩写之外的所有内容都相同),它的工作原理
  • 如果我把整个东西从admin命名空间移到我的应用程序的根目录(即EDMsController,通过/ edms访问),它的工作原理

值得注意的是,我在admin命名空间中有其他控制器和资源可以正常工作.

所以看起来我可以有一个首字母缩略词控制器,或命名空间中的控制器,但不是两者.

有什么建议?

小智 6

看起来这是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"
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用 Rails 6.0.2.2,但这仍然是一个问题。 (2认同)