2017-01-26 5 views
0

私はクラスを/lib/email_helper.rbで定義しています。クラスはコントローラまたはバックグラウンドジョブによって直接使用することができます。/libディレクトリに定義されているクラスのActionView :: Helpers :: DateHelperにアクセス

time_ago_in_wordsが呼び出される
class EmailHelper 
    include ActionView::Helpers::DateHelper 

    def self.send_email(email_name, record) 
     # Figure out which email to send and send it 
     time = time_ago_in_words(Time.current + 7.days) 
     # Do some more stuff 
    end 
end 

、タスクは次のエラーで失敗します:

undefined method `time_ago_in_words' for EmailHelper 

がどのように私は私のEmailHelperクラスのコンテキストからtime_ago_in_wordsヘルパーメソッドにアクセスすることができ、それは次のようになりますか?私はすでに関連モジュールを含んでいます。

また、私はhelper.time_ago_in_wordsActionView::Helpers::DateHelper.time_ago_in_wordsを呼び出すこともできません。

答えて

0

ルビーのincludeは、クラスActionView::Helpers::DateHelperを追加しています。

あなたのメソッドはクラスメソッドself.send_email)です。だから、あなたはextendincludeを置き換えることができ、そしてこのように、selfでそれを呼び出す:includeextendの違いだ

class EmailHelper 
    extend ActionView::Helpers::DateHelper 

    def self.send_email(email_name, record) 
     # Figure out which email to send and send it 
     time = self.time_ago_in_words(Time.current + 7.days) 

     # Do some more stuff 
    end 
end 

を。このような

それとも...

あなたはApplicationController.helpersを呼び出すことができ、:今すぐ完全な理にかなって

class EmailHelper 

    def self.send_email(email_name, record) 
     # Figure out which email to send and send it 
     time = ApplicationController.helpers.time_ago_in_words(Time.current + 7.days) 

     # Do some more stuff 
    end 
end 
+0

。私は、クラスメソッド内で 'time_ago_in_words'を使用しようとしていたという事実を見落としました。通常、インスタンスメソッドのどこか他の場所でそれを使用していました。ありがとう! – ACIDSTEALTH

関連する問題