可以使用ActiveSupport::Inflector完成类似的操作,它提供了titleize方法(它为String.titleize工作)。
首先,在初始化程序中定义您自己的变形。
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'US'
end
重新启动您的应用程序以获取更改。现在titleize
知道如何处理“美国”了。启动 Rails 控制台来检查它:
> "us".titleize
=> "US"
接下来,查看titleize
. 一旦你理解了它,在初始化器中重新打开 Inflector 类并定义你自己的方法,它不会将每个单词的第一个字母大写。称之为漂亮的东西,比如decapitalize
.
module ActiveSupport::Inflector
def decapitalize(word)
humanize(underscore(word)) # you may enhance this a bit
end
end
class String
def decapitalize
ActiveSupport::Inflector.decapitalize(self)
end
end
警告和限制
您可能需要调整代码,但我认为它很接近。
以下是该解决方案无法很好处理的一些句子:
> "US STATES VISITED BY US".titleize
=> "US States Visited By US"
> "COLUMBIA (CO) EXPORTS ARE PROCESSED BY ACME BUILDING CO.".decapitalize
=> "Columbia (CO) exports are processed by acme building CO."