看起来变形对于嵌套级别不止一个的模块名称不起作用。
如果您的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
这是一个错误吗?
答案 0 :(得分:2)
我会选择这是一个错误。您可以使用(在初始化程序内):
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
我会做一个拉动请求来解决这个问题,但需要稍微多一些时间来确认它不会破坏任何东西。这里有很多案例。
答案 1 :(得分:0)
我想知道我是否可以复制这个“问题”。
尝试了这个运行rails控制台。
> ActiveSupport::Inflector.camelize 'vcloud'
=> "Vcloud"
> ActiveSupport::Inflector.camelize 'v_cloud'
=> "VCloud"
下面列出了各种组合的测试用例。
http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html#method-i-acronym
https://github.com/rails/rails/blob/master/activesupport/test/inflector_test_cases.rb