Frage

Ich möchte einen Code für die Methode eines Modells über ein Modul hinzufügen, wenn er enthalten ist. Ich denke, ich sollte alias_method_chain verwenden, aber ich weiß nicht, wie ich es verwenden soll, da meine 'aliased -Methode' eine dieser Methoden ist, die mit dem '=' Zeichen enden:

class MyModel < ActiveRecord::Base

  def foo=(value)
    ... do stuff with value
  end

end

Das ist also, was mein Modul gerade aussieht:

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

Ich erhalte einen Fehler in der Funktionsdefinition. Wie geht es um das?

War es hilfreich?

Lösung

alias_method_chain ist eine einfache Zwei-Linie-Methode:

def alias_method_chain( target, feature )
  alias_method "#{target}_without_#{feature}", target
  alias_method target, "#{target}_with_#{feature}"
end

Ich denke, die Antwort, die Sie wollen, ist, einfach die beiden zu machen alias_method Ruft sich in diesem Fall an:

alias_method :foo_without_bar=, :foo=
alias_method :foo=, :foo_with_bar=

Und Sie würden Ihre Methode so definieren wie so:

def foo_with_bar=(value)
  ...
end

Ruby -Symbole verarbeiten das Nachverfolgung = und ? von Methodnamen ohne Problem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top