質問

モジュールが含まれている場合は、モジュールを介してモデルのメソッドにコードを「追加」したいと思います。私はairas_method_chainを使用する必要があると思いますが、私の「エイリアスメソッド」は「= 'sign:」で終わる方法の1つであるため、それを使用する方法がわかりません。

class MyModel < ActiveRecord::Base

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

end

これが私のモジュールが今見えるものです:

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

関数定義にエラーが発生します。これをどのように回避しますか?

役に立ちましたか?

解決

alias_method_chain 単純な2行の方法です。

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

私はあなたが望む答えは単に2つを作ることだと思います alias_method この場合、自分自身を呼びます:

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

そして、あなたはそうするようにあなたの方法を定義するでしょう:

def foo_with_bar=(value)
  ...
end

Rubyシンボルは、トレイルを処理します =? 問題のないメソッド名の。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top