Rails - alias_method_chain mit einer 'sattribut =' Methode
-
21-09-2019 - |
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?
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