繁体   English   中英

如何在Rails中使用缩写作为助手模块名称

[英]How to use acronym for helper module name in rails

我有一个名称缩写的模型,因此我将其配置为:

config / initializers / inflections.rb

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

我为该模型创建了帮助程序模块。

app / helpers / gnus / gnus_helper.rb

module GNUsHelper
end

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

看起来Rails正在寻找骆驼箱模块。

如何在Rails中使用首字母缩写词帮助器模块?

对于仍然对此感到疑惑的任何人。 只需定义首字母缩写及其复数形式,如下所示:

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

在这种情况下,ActiveSupport将GNUsHelper读取为两个单独的单词,它们由驼峰分隔(“ GNUs”和“ Helper”)。 您还必须定义“ GNU”作为此功能的首字母缩写。

此外,也无需在ActiveSupport.inflections块中调用inflect.titleizeinflect.camelizeinflect.underscore (块中的所有内容都为整个应用程序定义了变形规则,而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'

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM