假设我的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
都有效!
答案 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