1

我有一个名为名称的数据库字段。我在我的应用程序中使用了 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”时,这不应该适用。

请让我知道,这将如何完成。

4

1 回答 1

5

要覆盖原来的Model方法,可以写一个同名的方法,然后用它read_attribute(:attr)来表示原来的属性值。

给定name属性存在,覆盖#name

def name
  "#{salutation} #{read_attribute(:name)}"
end
于 2013-06-13T07:59:16.410 回答