Rails - 全局Humanize属性

时间:2012-08-21 13:36:06

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

假设我的User模型具有name属性。如果@user的名称为'CAIO',我可以调用人性化方法使其更好:

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

但我很懒,而且我不想每次都致电humanize:我希望@user.name返回人性化版本。

现在,我知道我可以使用辅助方法或类似

的模型来实现
def h_name
  self.name.humanize
end

但是这样做我必须用@user.name更改我的应用中的所有@user.h_name ...而且我很懒! : - )

是否有办法直接在模型中声明它,但使用name来调用它?更好的是,对我所有模型的name都有效!

3 个答案:

答案 0 :(得分:2)

结帐draper。这个gem提供了装饰器(很像演示者),它以面向对象的方式捆绑视图逻辑。此外,瑞安贝茨已经组织了一个很好的RailsCast on Draper

答案 1 :(得分:1)

您可以在模型中添加before_save。

before_save:h_name

def h_name     self.name = self.name.humanize   端

答案 2 :(得分:1)

This similar question解释了几种方法。

一种可能性是:

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