Puis-je mettre en œuvre et poseur getter rails pour les attributs pour les colonnes db
-
19-09-2019 - |
Question
Dans les rails, nous pouvons accéder à la colonne db par des attributs des rails fournis, mais pouvons-nous changer cela? par exemple, j'ai db avec une colonne de nom que je pourrais mettre en œuvre quelque chose comme.
def name
"sir" + name
end
Je l'ai essayé, mais ce résultat dans un débordement de pile. Il existe un moyen d'y arriver.
question, est-il une différence entre le nom et self.name.
La solution
def name
"sir" + read_attribute(:name)
end
Mais il faut éviter cette pratique. Utilisez plutôt un getter / setter supplémentaire, également connu comme « attribut virtuel ». Pour plus d'informations lire cette réponse: décorer un attribut dans des rails
Dans votre cas, il y a aussi un effet secondaire bizarre. Chaque fois que l'attribut est accessible, il ajoute le nom. Après 3 appels, vous vous retrouvez avec
"sir sir sir name"
En effet, vous pouvez faire
def name
n = read_attribute(:name)
if /^sir/.match(name)
n
else
"sir #{n}"
end
end
mais, sérieusement, ne pas le faire.
Autres conseils
Si vous êtes au courant des complications possibles, mais encore besoin de faire cela, alors:
def name
"sir" + self[:name]
end
Utilisez super
Il a beaucoup d'explications, mais je pense qu'il est aussi simple que d'appeler la méthode qui est déjà défini
def name
"sir #{super}"
end