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?

Était-ce utile?

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
scroll top