Un exemple de ce dont je parle:
class Person < ActiveRecord::Base
def name=(name)
super(name.capitalize)
end
def name
super().downcase # not sure why you'd do this; this is just an example
end
end
Cela semble fonctionner, mais je viens de lire la section sur le remplacement des méthodes d'attributs dans la documentation ActiveRecord :: Base , et cela suggère d'utiliser les méthodes read_attribute
et write_attribute
. Je pensais qu'il devait y avoir quelque chose de mal avec ce que je fais dans l'exemple ci-dessus; sinon, pourquoi béniraient-ils ces méthodes comme la «bonne façon» de remplacer les méthodes attributaires? Ils forcent également un langage beaucoup plus laid, donc il doit y avoir une bonne raison ...
Ma vraie question: y a-t-il quelque chose qui ne va pas avec cet exemple?
ruby-on-rails
oop
activerecord
Ajedi32
la source
la source
Comme extension de la réponse d'Aaron Longwell, vous pouvez également utiliser une «notation de hachage» pour accéder aux attributs qui ont remplacé les accesseurs et les mutateurs:
la source
self.attribute
souffle la pile sur 3.2.16.||=
pour le défaut:def name; self[:name] ||= 'anon'; end
Des informations intéressantes sont disponibles sur ce sujet à l' adresse http://errtheblog.com/posts/18-accessor-missing .
En résumé, ActiveRecord gère correctement les super appels pour les accesseurs d'attributs ActiveRecord.
la source
J'ai un plugin rails qui permet de remplacer les attributs avec super comme vous vous en doutez. Vous pouvez le trouver sur github .
À installer:
Utiliser:
Une fois que vous avez fait cela, les choses fonctionnent:
la source