在rails中,我们可以通过提供的属性rails访问db列,但是我们可以更改它吗? 例如,我有db with name column我可以实现类似的东西。
def name
"sir" + name
end
我试过了,但是导致堆栈溢出。有一种方法可以实现这一目标。
更多问题,name和self.name之间是否有任何区别。
答案 0 :(得分:8)
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
但是,严肃地说,不要这样做。
答案 1 :(得分:2)
如果您知道可能的并发症,但仍需要这样做,那么:
def name
"sir" + self[:name]
end
答案 2 :(得分:0)