我有名为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”。
时,这不适用请告诉我,如何做到这一点。
答案 0 :(得分:4)
要覆盖原始模型方法,可以编写具有相同名称的方法,然后使用read_attribute(:attr)
表示原始属性值。
如果存在name
属性,则覆盖#name
:
def name
"#{salutation} #{read_attribute(:name)}"
end