8

モデルにクラスメソッドがあり、ビューヘルパーの1つからメソッドにアクセスする必要があります。現在、を含めinclude TalkHelperていますが、それでもNoMethodErrorが発生します。

4

3 に答える 3

42

モデルでは、次のようなことができます。

ApplicationController.helpers.your_helper_method

また

YourController.helpers.your_helper_method

最善の解決策は、モデルからビューヘルパーコードをまったく呼び出さなくても済むように、コードをリファクタリングすることです。それはRoRの方法ではありません。他の人が指摘しているように、ヘルパーコードをlibフォルダーに抽出できます。

詳細については、こちらをご覧ください。

http://railscasts.com/episodes/132-helpers-outside-views

于 2011-09-19T00:29:51.077 に答える
9

libフォルダーにヘルパーを配置し、そこに含めることができます。このように:lib / some_helper.rb

module SomeHelper
  def somedef
    #your code there
  end
end
于 2011-09-18T23:40:01.133 に答える
6

クラスメソッドでヘルパーが必要な場合は、それではなくextend、必要になりincludeます。

module TalkHelper
  def woo; 'hoo' end
end   

class MyClass
  extend TalkHelper

  def self.boo; woo end
end

MyClass.boo #=> 'hoo'

ヘルパーはリクエストのコンテキストに依存する可能性があるため、ビューコンテキスト外のヘルパーには注意しcontrollerてください。これは、モデルでは使用できません。

于 2011-09-19T00:05:48.853 に答える