私は呼び出したい実際のメソッド(before_filter/before_actionのような)を呼び出す前にメソッドを呼び出せるように、メタプログラミング(ruby 2.3.1を使用)を使用しています。私は以下のコードに到着 -NoMethodError:未定義メソッド `alias_method '
以下の擬似コードは私は理論的には私はメタプログラミングを使ってやりたいことを理解することができたSOメンバーの助けを借りて
module Api
def call_this_method_everytime
if A
go ahead and call the actual method being called
else
stop here do not call he method it was supposed to call
end
end
def when_i_call_this_method
end
def or_this_method
end
end
を達成しようとしていますについて説明します。代わりに私が欲しいメソッドを呼び出すの
module Api
def heartbeat
...
end
def interceptor(name)
original_method = "original #{name}"
alias_method original_method, name
define_method(name) do |*args|
heartbeat
result = send original_method, *args
puts "The method #{name} called!"
result
end
end
end
は - 私は、引数として呼び出したい実際の関数の名前を持つインターセプタメソッドを呼び出します。私はまずheartbeat
関数を呼び出し、チェックがOKならば実際に実際の関数を呼び出すことに進みます。
NoMethodError: undefined method 'alias_method'
を取得しています。どんな助けもありがたい。
alias_methodあなたはおそらくここに未定義得ている理由です、アクティブなサポート方法です。 –
'interceptor(my_method)'が呼び出されたときに私が正しく理解しているかどうかを見てみましょう。my_methodを修正して最初の機能を呼び出すようにしたいのですか?あなたのコードでは、alias_methodを使って元のメソッドの「コピー」を作成しています。このメソッドを呼び出すと、変更されたメソッドを呼び出すことができますか? – eiko
私は以前、あなたがやろうとしているものに近いアップデート版です。 –