0

假设我有一个User带有name属性的模型。如果一个@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我所有的模型!

4

3 回答 3

2

检查带。这个 gem 提供了以面向对象的方式捆绑视图逻辑的装饰器(很像演示者)。此外,Ryan Bates在 Draper 上制作了出色的 RailsCast

于 2012-08-21T13:57:10.967 回答
1

您可以在模型中添加 before_save。

before_save :h_name

def h_name self.name = self.name.humanize end

于 2012-08-21T14:00:51.463 回答
1

这个类似的问题解释了几种方法来做到这一点。

一种可能性是:

class User < ActiveRecord::Base
    def name
        super().humanize
    end
end
于 2012-08-21T14:13:40.683 回答