我可以实现为DB列属性轨setter和getter
-
19-09-2019 - |
题
在导轨我们可以通过导轨提供的属性访问分贝列,但我们可以改变这种? 比如我有名字列DB我可以实现类似的东西。
def name
"sir" + name
end
我尝试过,但它导致堆栈溢出。有一种方法来实现此目的。
更多问题,是否有名称和self.name之间的任何差异。
解决方案
def name
"sir" + read_attribute(:name)
end
但是避免这种做法。使用一个额外的getter / setter相反,也称为“虚拟属性”。 欲了解更多信息,请阅读这样的回答:装饰在轨 属性p>
在你的情况,也有一个奇怪的副作用。每个属性被访问时,其附加的名字。后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
不隶属于 StackOverflow