Puis-je mettre en œuvre et poseur getter rails pour les attributs pour les colonnes db

StackOverflow https://stackoverflow.com/questions/1906702

  •  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.

Était-ce utile?

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

méthodes Ruby prépondérants

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top