Frage

In Schienen wir db Spalte durch Attribute zugreifen können Schienen, aber können wir das ändern? Zum Beispiel habe ich db mit Namensspalte so etwas wie ich implementieren könnte.

def name
  "sir" + name
end

Ich versuchte es, aber es ergibt sich in Stapelüberlauf. Es gibt einen Weg, dies zu erreichen.

mehr Frage, Gibt es einen Unterschied zwischen Namen und self.name.

War es hilfreich?

Lösung

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

Aber vermeiden Sie diese Praxis. Verwenden Sie einen zusätzliches Getter / Setter statt, die auch als „virtuelles Attribut“ bekannt. Für weitere Informationen lesen Sie diese Antwort: ein Attribut in Schienen Dekoration

In Ihrem Fall gibt es auch eine seltsame Nebenwirkung. Jedes Mal wenn das Attribut zugegriffen wird, fügt er den Namen. Nach 3 Anrufen, Sie am Ende mit

"sir sir sir name"

Tatsächlich können Sie tun,

def name
  n = read_attribute(:name)
  if /^sir/.match(name)
    n
  else
    "sir #{n}"
  end
end

aber, im Ernst, dies nicht tun.

Andere Tipps

Wenn Sie sich bewusst über die möglichen Komplikationen, müssen aber nach wie vor, dies zu tun, dann:

def name
  "sir" + self[:name]
end

Verwenden super

Ruby-Überschreiben von Methoden

Es hat eine Menge zu erklären, aber ich denke, dass es so einfach ist, das Verfahren als Aufruf, die bereits definiert sind

def name
  "sir #{super}"
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top