在导轨我们可以通过导轨提供的属性访问分贝列,但我们可以改变这种? 比如我有名字列DB我可以实现类似的东西。

def name
  "sir" + name
end

我尝试过,但它导致堆栈溢出。有一种方法来实现此目的。

更多问题,是否有名称和self.name之间的任何差异。

有帮助吗?

解决方案

def name
  "sir" + read_attribute(:name)
end

但是避免这种做法。使用一个额外的getter / setter相反,也称为“虚拟属性”。 欲了解更多信息,请阅读这样的回答:装饰在轨

在你的情况,也有一个奇怪的副作用。每个属性被访问时,其附加的名字。后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

使用super

红宝石重写方法

它有很多解释,但我认为这是因为调用一个已经定义的方法简单

def name
  "sir #{super}"
end
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top