J'ai créé une classe Model où je définis des méthodes basées sur une méthode (attribut) appelée dans User (qui hérite de Model). Le problème est que je ne peux pas remplacer la méthode définie par define_method, et appeler super pour passer à la méthode définie. Je suppose que c'est parce que la méthode définie est ajoutée à l'utilisateur lui-même, et non au modèle, donc il n'a en fait pas de méthode dans la superclasse (c'est-à-dire le modèle).Appeler super sur une méthode définie par define_method
La raison pour laquelle je veux faire ceci est parce que la plupart des attributs devraient être sauvés à la base de données directement, tandis que certains attributs, comme le mot de passe, ont besoin de traitement supplémentaire.
class Model
def self.attribute(name)
define_method(name) do
self
end
end
end
class User < Model
attribute :password
end
class User2 < Model
attribute :password
def password
super
end
end
@user = User.new
puts @user.password # => <User:0x00000100845540>
@user2 = User2.new
puts @user2.password
# define_super.rb:17:in `password': super: no superclass method
# `password' for #<User2:0x00000100845578> (NoMethodError)
# from define_super.rb:25:in `<main>'
Y at-il un moyen de changer le code pour que cela fonctionne? J'ai besoin d'un moyen de remplacer les méthodes créées dynamiquement.
Merci. C'était juste ce dont j'avais besoin. –
Si c'est ce dont vous aviez besoin, vous devriez sélectionner la réponse. Mieux vaut tard (de plus de 7 ans) que jamais. :-) –