在Rails中使用titleize作为首字母缩略词

时间:2011-03-29 00:09:32

标签: ruby-on-rails string

我用缩略词定义了一些活跃的记录。 RvPark(休闲车公园)。当我为课程名称命名时,我会得到'Rv Park'。它应该是'RV Park'。有没有办法做到这一点?由于这个模型与其他模型共享代码,我需要创建一个通用解决方案,但我无法想出一个。

我确实看到了对此的讨论,但没有一个解决方案对我有用。任何见解都表示赞赏。

https://rails.lighthouseapp.com/projects/8994/tickets/2944-titleize-doesnt-take-all-uppercase-words-into-account

2 个答案:

答案 0 :(得分:16)

您可以通过配置提供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"

请参阅链接的文档,了解更多有关变形的精彩内容。

答案 1 :(得分:3)

更新:发布此内容后,支持对象was added to the Rails Inflector

有关Rails 3.2及更高版本的信息,请参阅@Anson's answer


这看起来像titleize不适合的边缘情况。问题是capitalize内部调用将始终将RV转换为Rv。

我会为内部调用self.class.titleize的模型创建一个通用名称函数,然后在RVPark模型中重载它。