【问题标题】:Using titleize for acronym in Rails在 Rails 中使用 titleize 作为首字母缩写词
【发布时间】:2018-12-06 23:49:43
【问题描述】:

我正在用首字母缩写词定义一些活动记录。 RvPark(休闲停车场)。当我为班级名称命名时,我得到了“Rv Park”。它真的应该是“房车公园”。有没有好的方法来做到这一点?由于这个模型与其他模型共享代码,我需要创建一个通用的解决方案,但我一直无法想出一个。

我确实看到了有关此问题的讨论,但没有适合我的解决方案。任何见解都值得赞赏。

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

【问题讨论】:

    标签: ruby-on-rails string


    【解决方案1】:

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

    查看链接的文档,了解更多关于变形的酷炫内容。

    【讨论】:

      【解决方案2】:

      更新:在我发布此消息后,首字母缩写词支持 was added to the Rails Inflector

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


      这看起来像是 titleize 并非设计用于的边缘案例。问题是里面的capitalize调用总是会把RV变成Rv。

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

      【讨论】:

      • @GabeKopley github.com/granth/titleize gem 如何在提出问题的场景中工作?它似乎正常工作 titleize
      • 这个答案不正确。首字母缩略词不是极端情况,Rails 中的titleize 绝对可以处理它们。请参阅下面的答案。
      • @nathan.f77 我的答案在编写时是正确的,但不久之后 Inflector 已更新以支持此用例。
      • 啊,对,哇,我没看到那是 2011 年的。好吧,抱歉 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多