Rai*_*ast 1 activerecord ruby-on-rails-3
我有名为 name 的数据库字段。我在我的应用程序中使用了 user.name。现在我有一些类似称呼的东西,我想在名字后面加上。所以我基本上想要的是当我通过 user.name 访问 name 时,它应该从实例方法而不是数据库字段中获取值。
def name_with_salutation
"#{salutation} #{name}"
end
Run Code Online (Sandbox Code Playgroud)
因此,当我通过 user.name 访问 name 时,它应该响应 user.name_with_salutation。我尝试过 alias_method 但它显示堆栈级别太深,因为 name 正在 name_with_salutation 中使用,因此它陷入了无限进程。
我正在尝试这个,因为我不想在整个应用程序中用 name_with_salutation 替换 name。当我分配值 user.name = "abc" 时,这不应该适用。
请让我知道,这将如何完成。
要覆盖一个原来的Model方法,可以写一个同名的方法,然后用它read_attribute(:attr)来表示原来的属性值。
给定name属性存在,覆盖#name:
def name
"#{salutation} #{read_attribute(:name)}"
end
Run Code Online (Sandbox Code Playgroud)