看起来,对于嵌套级别不止一个的模块名称,拐点不起作用。

如果config/initializers/inflections.rb中包含以下内容:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym 'VCloud'
end


然后,在app/下创建目录时,说app/services/vcloud/,您将获得两个模块:

Vcloud #=> Vcloud
VCloud #=> VCloud


但是,如果您创建具有更高嵌套级别的目录,请说app/services/vmware/vcloud/,您将仅获得一个模块:

Vmware::Vcloud #=> Vmware::Vcloud
Vmware::VCloud #=> NameError: uninitialized constant Vmware::VCloud


这是一个错误吗?

最佳答案

我会用这是一个错误。您可以使用(在初始化程序中)解决它:

module ActiveSupport::Inflector
  def underscore_with_acronym_fix(string)
    words = string.split('::')
    return words.map(&method(:underscore)).join('/') unless words.one?
    underscore_without_acronym_fix(string)
  end

  alias_method_chain :underscore, :acronym_fix
end


我将提出拉动请求以解决此问题,但是将需要更多时间来确认它不会破坏任何东西。这里有很多情况。

关于ruby-on-rails - 缩写形式的Rails模块名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26485486/

10-10 14:15