J'essaie de remplacer une méthode getter pour un modèle ActiveRecord. J'ai un attribut appelé name
dans le modèle Category
et j'aimerais pouvoir faire quelque chose comme ceci:
def name
name_trans || name
end
Si l' name_trans
attribut n'est pas nul, alors renvoyez-le, sinon renvoyez l' name
attribut. Comment ferais-je ça?
Cela devrait alors être appelé normalement comme ceci:
@category.name
ruby-on-rails
ruby
rails-activerecord
getter-setter
oyvindhauge
la source
la source
Mise à jour: La méthode préférée selon le guide de style des rails est d'utiliser à la
self[:name]
place deread_attribute
etwrite_attribute
. Je vous encourage à sauter ma réponse et à préférer celle-ci .Vous pouvez le faire exactement comme ça, sauf que vous devez utiliser
read_attribute
pour récupérer la valeur de l'attribut name et éviter l'appel récursif à laname
méthode:la source
self[:name]
plusread_attribute[:name]
?Je voudrais ajouter une autre option pour écraser la méthode getter, qui est simplement : super.
cela fonctionne non seulement sur la méthode getter des attributs, mais aussi sur les méthodes getter des associations , aussi。
la source
Remplacer le getter et utiliser
read_attribute
ne fonctionne pas pour les associations, mais vous pouvez utiliser à laalias_method_chain
place.la source
name
l'objet modèle, lequel sera appelé -name_with_override
ouname_without_override
?name
va maintenant appelername_with_override
. Si vous souhaitez appeler la méthode d'origine pour une raison quelconque, vous pouvez appelername_without_override
.Si vous utilisez des attributs de magasin comme celui-ci
ou en utilisant des gemmes comme
hstore_accessor
un lien de gemmeVous avez donc fini par utiliser la
store
méthode sur le modèle, puis pour remplacer les méthodes que vous ne pouvez pas utiliserself.read_attribute
, vous devez utiliser à la placesuper
comme ça:la source
Si quelqu'un veut mettre à jour la valeur après
name_trans
dans la méthode getter, vous pouvez utiliser self [: name] =.la source
Vous pouvez utiliser la méthode read_attribute de Rails. Documentation sur les rails
la source