29

モジュール内のモジュール内に作成したメソッドのいくつかを含む、Rails用の小さなプログラムを作成していApplicationHelperます。次に例を示します。

module Helper
    def time
        Time.now.year
    end
end

module ApplicationHelper
    # Inherit from Helper here...
end

私はそれを知ってApplicationHelper < Helperおりinclude Helper、クラスのコンテキストで機能しますが、モジュール間で継承するために何を使用しますか?ありがとう。

4

2 に答える 2

31

実際、別のモジュールの内側にモジュールを定義して、それを外側のモジュールに含めることができます。

so ross$ cat >> mods.rb
module ApplicationHelper
  module Helper
    def time
      Time.now.year
    end
  end
  include Helper
end

class Test
  include ApplicationHelper
  def run
    p time
  end
  self
end.new.run
so ross$ ruby mods.rb
2012
于 2012-04-15T01:07:06.190 に答える
5

潜在的な落とし穴の1つは、含まれているモジュールがクラスメソッドをアタッチしている場合、それらのメソッドが間違ったオブジェクトにアタッチされている可能性があることです。

場合によっては、「親」モジュールを基本クラスに直接含めてから、新しいメソッドで別のモジュールを含める方が安全な場合があります。例えば

module ApplicationHelper
  def self.included(base)
    base.class_eval do
      include Helper
      include InstanceMethods
    end
  end

  module InstanceMethods
    def new_method
      #..
    end
  end

end

ApplicationHelper新しいメソッドは、メソッド定義の後に実行されるため、で直接定義されないinclude Helperため、で上書きされHelperます。class_evalあるいは、ブロック内のメソッドを定義することもできます

于 2015-07-23T13:45:13.227 に答える