¿Puedo aplicar rieles setter y getter para los atributos de columnas db
-
19-09-2019 - |
Pregunta
En los carriles podemos acceder a través de la columna db atributos carriles previstos, pero podemos cambiar esto? Por ejemplo, he db con la columna nombre podría implementar algo similar.
def name
"sir" + name
end
Lo probé, pero producen un desbordamiento de pila. Hay una manera de lograr esto.
última pregunta, ¿Hay alguna diferencia entre el nombre y self.name.
Solución
def name
"sir" + read_attribute(:name)
end
Pero evitar esta práctica. Utilizar un captador adicional / definidor lugar, también conocido como "atributo virtual". Para obtener más información, lea esta respuesta: decorar un atributo en los carriles
En su caso, también hay un efecto secundario raro. Cada vez que se accede al atributo, se añade el nombre. Después de 3 llamadas, usted termina con
"sir sir sir name"
De hecho, puede hacerlo
def name
n = read_attribute(:name)
if /^sir/.match(name)
n
else
"sir #{n}"
end
end
pero, en serio, no lo haga.
Otros consejos
Si usted es consciente de las posibles complicaciones, pero todavía tiene que hacer esto, entonces:
def name
"sir" + self[:name]
end
Uso super
Tiene que dar muchas explicaciones, pero creo que es tan simple como una llamada al método que ya está definido
def name
"sir #{super}"
end