1

作成したメソッドにモンキー パッチを適用したいalias_method_chainが、上書きされたメソッドが呼び出されない

# foo.rb
require 'active_support/core_ext'

class Foo
  def foo
    "original foo"
  end

  def foo_with_flag
    "foo with flag"
  end

  alias_method_chain :foo, :flag
end

# foo_ext.rb
class Foo
  def foo_with_flag
    "overridden foo with flag"
  end
end

foo = Foo.new
foo.foo # => "foo with flag"
foo.foo_with_flag # => "overridden foo with flag"

Foo#fooの最後の実装を使用するにはどうすればよいFoo#foo_with_flagですか?

4

1 に答える 1

2

最初alias_method_chainの定義を再定義すると、最初の定義にまだエイリアスが作成されalias_method :foo, :foo_with_flagます2 番目の定義の後で (「チェーン全体」ではなく) やり直すfoo_with_flag :foo必要があります。alias_method :foo, :foo_with_flag

于 2012-11-19T20:53:26.140 に答える