【发布时间】:2018-12-06 23:49:43
【问题描述】:
我正在用首字母缩写词定义一些活动记录。 RvPark(休闲停车场)。当我为班级名称命名时,我得到了“Rv Park”。它真的应该是“房车公园”。有没有好的方法来做到这一点?由于这个模型与其他模型共享代码,我需要创建一个通用的解决方案,但我一直无法想出一个。
我确实看到了有关此问题的讨论,但没有适合我的解决方案。任何见解都值得赞赏。
【问题讨论】:
标签: ruby-on-rails string
我正在用首字母缩写词定义一些活动记录。 RvPark(休闲停车场)。当我为班级名称命名时,我得到了“Rv Park”。它真的应该是“房车公园”。有没有好的方法来做到这一点?由于这个模型与其他模型共享代码,我需要创建一个通用的解决方案,但我一直无法想出一个。
我确实看到了有关此问题的讨论,但没有适合我的解决方案。任何见解都值得赞赏。
【问题讨论】:
标签: ruby-on-rails string
您可以通过配置ActiveSupport::Inflector 来做到这一点,它提供了titleize 方法。只需在初始化程序中定义您自己的inflections。
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'RV'
end
重新启动您的应用以获取更改。现在titleize 知道如何处理“RV”。启动 Rails 控制台进行检查:
> "RvPark".titleize
=> "RV Park"
> "rv".titleize
=> "RV"
查看链接的文档,了解更多关于变形的酷炫内容。
【讨论】:
更新:在我发布此消息后,首字母缩写词支持 was added to the Rails Inflector。
有关 Rails 3.2 及更高版本,请参阅 @Anson's answer。
这看起来像是 titleize 并非设计用于的边缘案例。问题是里面的capitalize调用总是会把RV变成Rv。
我会为在内部调用 self.class.titleize 的模型创建一个通用名称函数,然后在 RVPark 模型中重载它。
【讨论】:
titleize 绝对可以处理它们。请参阅下面的答案。