我有一个名称是首字母缩略词的模型,所以我配置如下:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'GNU'
end
我为该模型创建了辅助模块。
module GNUsHelper
end
然后我收到错误Circular dependency detected while autoloading constant GnusHelper
。
似乎Rails正在寻找驼峰案例模块。
如何在Rails中使用首字母缩略词辅助模块?</ p>
答案 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.camelize
,inflect.underscore
或ActiveSupport.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