0

私のモデルWidget.rbには、include ApplicationHelperapplication_helper.rbで定義されたメソッドを使用しても問題はありません。

ただし、次のようなクラスメソッドのいずれかでヘルパーメソッドの1つを使用しようとすると

def self.send_broadcast(guid)
   track_guids(guid) # defined in application_helper.rb
end

メソッドエラーが発生しません。

クラスメソッド内でApplicationHelperメソッドの使用を許可するための秘密のハンドシェイクはありますか?

4

2 に答える 2

2

ApplicationHelper単なるモジュールです:

module ApplicationHelper
  def track_guids(something)

  end
end

class Widget
  extend ApplicationHelper

  def self.send_broadcast(guid)
    track_guids(guid)
  end
end

これで、クラス メソッドからモジュール メソッドにアクセスできるようになります。ただし、同じモジュールを拡張して含めることができるかどうかはわかりません...それが何をするかはよくわかりません。

編集して追加:

同じモジュールを拡張してクラスに含めるとどうなるかわかりません。モジュールをextendクラスレベルでincludeインクルードすると、インスタンスレベルでインクルードされます。両方を実行すると、クラスとインスタンスの両方でメソッドが提供される可能性があります...または、恐ろしく死ぬ可能性があります。試してみる?

于 2012-08-23T21:16:02.377 に答える
-1

self がインスタンスでない限り、インスタンス メソッドにアクセスできないと思います。Widget のインスタンスを作成してそこからクラス メソッドを呼び出すか、モジュールからメソッドを直接呼び出すことができます。

于 2012-08-23T21:03:06.637 に答える