【问题标题】:Rails - Humanize attribute globallyRails - 全局人性化属性
【发布时间】:2012-08-16 20:53:56
【问题描述】:

假设我有一个带有name 属性的User 模型。如果@user 的名称为'CAIO',我可以调用humanize 方法让它变得更好:

@user.name          =======> CAIO
@user.name.humanize =======> Caio

但我很懒,不想每次都打电话给humanize:我想@user.name返回人性化版本。

现在,我知道我可以使用辅助方法或类似的模型来做到这一点

def h_name
  self.name.humanize
end

但是这样做之后,我必须将我的应用程序中的所有@user.name 更改为@user.h_name...我很懒惰!!! :-)

有没有办法直接在模型中声明,而是使用name来调用呢?更好的是,它适用于我所有模型中的name

【问题讨论】:

    标签: ruby-on-rails model human-readable


    【解决方案1】:

    查看draper。这个 gem 提供了以面向对象的方式捆绑视图逻辑的装饰器(很像演示者)。此外,Ryan Bates 还编写了一个出色的 RailsCast on Draper

    【讨论】:

    • 我查过了,建议大家试试 Draper。真的很方便!
    【解决方案2】:

    您可以在模型中添加 before_save。

    before_save :h_name

    定义 h_name self.name = self.name.humanize 结束

    【讨论】:

      【解决方案3】:

      This similar question 解释了几种方法。

      一种可能性是:

      class User < ActiveRecord::Base
          def name
              super().humanize
          end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 2011-12-20
        • 2018-08-05
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        相关资源
        最近更新 更多