在rails中,如何在调用user.name时标题化字符串?

时间:2012-01-06 03:49:21

标签: ruby-on-rails ruby-on-rails-3

我猜这个很简单,但我只是不确定如何谷歌。

我有一个带有Name列的User模型,其中name是一个小写字符串。我想配置我的模型,以便在检索名称值时调用string.titleize。

目前:

user = User.find(89)
user.name
==> 'larry david'

但我想要

user.name
==> 'Larry David'

我希望将此内置到模型中,这样我就不必在所有视图中调用'.titleize'

谢谢!

2 个答案:

答案 0 :(得分:13)

覆盖Rails的属性访问器方法:

class User < ActiveRecord::Base
  def name
     read_attribute(:name).try(:titleize)
  end
end

注意:当{name}属性为try时,NoMethodError方法会默默避免nil异常。

答案 1 :(得分:2)

如果您只关注为什么不覆盖to_s模型中User方法的观点?

def to_s
  self.name.titleize
end

然后在视图中<h1><%= @user %></h1>将被标题化。