在 rails 中,我们可以通过提供的属性 rails 访问 db 列,但是我们可以更改它吗?例如,我有带有名称列的数据库,我可以实现类似的东西。
def name
"sir" + name
end
我试过了,但它导致堆栈溢出。有一种方法可以做到这一点。
更多问题,name 和 self.name 之间有什么区别。
在 rails 中,我们可以通过提供的属性 rails 访问 db 列,但是我们可以更改它吗?例如,我有带有名称列的数据库,我可以实现类似的东西。
def name
"sir" + name
end
我试过了,但它导致堆栈溢出。有一种方法可以做到这一点。
更多问题,name 和 self.name 之间有什么区别。
def name
"sir" + read_attribute(:name)
end
但要避免这种做法。改用额外的 getter/setter,也称为“虚拟属性”。有关更多信息,请阅读此答案:decorating an attribute in rails
在你的情况下,还有一个奇怪的副作用。每次访问该属性时,它都会附加名称。3个电话后,你最终得到
"sir sir sir name"
确实,你可以做到
def name
n = read_attribute(:name)
if /^sir/.match(name)
n
else
"sir #{n}"
end
end
但是,说真的,不要这样做。
如果您知道可能出现的并发症,但仍需要这样做,那么:
def name
"sir" + self[:name]
end