在Rails中访问时使用Instance方法而不是Database字段

时间:2013-06-13 07:49:47

标签: ruby-on-rails-3 activerecord

我有名为name的数据库字段。我在我的应用程序中使用了user.name。现在我有一些像称呼的东西,我想用名字附加。所以我基本上想要的是当我通过user.name访问名称时,它应该从实例方法而不是数据库字段中获取值。

def name_with_salutation
 "#{salutation} #{name}"
end

因此,当我通过user.name访问名称时,它应该使用user.name_with_salutation进行响应。我已经尝试了alias_method,但它显示堆栈级别太深,因为name已经在name_with_salutation中使用,因此它陷入了无限的过程中。

我正在尝试这个,因为我不想在整个应用程序中用name_with_salutation替换name。当我分配值user.name =“abc”。

时,这不适用

请告诉我,如何做到这一点。

1 个答案:

答案 0 :(得分:4)

要覆盖原始模型方法,可以编写具有相同名称的方法,然后使用read_attribute(:attr)表示原始属性值。

如果存在name属性,则覆盖#name

def name
  "#{salutation} #{read_attribute(:name)}"
end