如何在rails中使用辅助模块名称的首字母缩写词

时间:2015-02-04 05:29:46

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个名称是首字母缩略词的模型,所以我配置如下:

配置/初始化/是inflections.rb

ActiveSupport::Inflector.inflections(:en) do |inflect|
    inflect.acronym 'GNU'
end

我为该模型创建了辅助模块。

应用程序/助手/角马/ gnus_helper.rb

module GNUsHelper
end

然后我收到错误Circular dependency detected while autoloading constant GnusHelper

似乎Rails正在寻找驼峰案例模块。

如何在Rails中使用首字母缩略词辅助模块?<​​/ p>

2 个答案:

答案 0 :(得分:1)

对于仍然对此感到疑惑的人。只需定义首字母缩略词及其复数版本,如下所示:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'GNU'
  inflect.acronym 'GNUs'
end

在这种情况下,ActiveSupport将GNUsHelper读取为由camelcase(&#34; GNU&#34;和#34; Helper&#34;)分隔的2个单独的单词。您还必须定义&#34; GNU&#34;作为这个工作的首字母缩写。

此外,无需在inflect.titleize块内调用inflect.camelizeinflect.underscoreActiveSupport.inflections。 (块内的所有内容都定义了整个应用程序的变形规则,并且titlelize不是规则)

文档建议定义首字母缩写词的复数形式以避免像这样的问题。

来自文档

http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html#method-i-acronym

注意:将不再识别传递给复数的缩略语,因为缩写词不会作为复数结果中的分隔单位出现。要解决此问题,您还必须将复数形式指定为首字母缩略词:

acronym 'API'
camelize(pluralize('api')) #=> 'Apis'

acronym 'APIs'
camelize(pluralize('api')) #=> 'APIs'

答案 1 :(得分:-2)

http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html#method-i-acronym

看起来您可能需要指定此单词的其他形式。

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym    'GNU'
  inflect.titleize   'GNU'     
  inflect.camelize   'GNU'     
  inflect.underscore 'GNU' 
end