Rails - alias_method_chain avec un procédé « attribut = »
-
21-09-2019 - |
Question
Je voudrais « ajouter » un code sur la méthode d'un modèle via un module, lorsqu'il est inclus. Je pense que je devrais utiliser alias_method_chain, mais je ne sais pas comment l'utiliser, car ma « méthode aliasé » est l'une de ces méthodes se terminant le signe « = »:
class MyModel < ActiveRecord::Base
def foo=(value)
... do stuff with value
end
end
Voilà donc ce que mon module examine en ce moment:
module MyModule
def self.included(base)
base.send(:include, InstanceMethods)
base.class_eval do
alias_method_chain 'foo=', :bar
end
end
module InstanceMethods
def foo=_with_bar(value) # ERROR HERE
... do more stuff with value
end
end
end
Je reçois une erreur sur la définition de la fonction. Comment contourner ce ne?
La solution
alias_method_chain
est une méthode simple, deux lignes:
def alias_method_chain( target, feature )
alias_method "#{target}_without_#{feature}", target
alias_method target, "#{target}_with_#{feature}"
end
Je pense que la réponse que vous voulez est simplement de faire les deux alias_method
vous appelle dans ce cas:
alias_method :foo_without_bar=, :foo=
alias_method :foo=, :foo_with_bar=
Et vous définiriez votre méthode comme ceci:
def foo_with_bar=(value)
...
end
traiter les symboles Ruby la =
arrière et ?
des noms de méthode sans problème.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow