2010-09-10 65 views
21

我有需要字符串數組,並加入他們的方法,使他們做這樣的事情:我在哪裏可以爲ActionMailer視圖添加輔助方法?

>> my_arr 
=> ["A", "B", "C"] 
>> and_join(my_arr) 
=> "A, B, and C" 

這一點我想我的郵件不得不這樣我就可以輸出一些信息到電子郵件訪問。我似乎無法找到一個放置它並將其放入application_helper.rb文件中的好地方,並且在那裏找不到它。它應該去哪裏?

+3

值得看看rails提供的數組的'to_sentence'擴展方法。 – Shadwell 2010-09-10 08:32:35

+0

@Shadwell,發佈這個答案,我會給它+1。這正是我所期待的。 – DJTripleThreat 2010-09-10 18:13:30

+0

類似的一個 - http://amolnpujari.wordpress.com/2013/12/27/highlight-changes-being-made-on-activerecord-object-inside-mail/ – 2013-12-27 11:32:07

回答

62

使用您的郵件的helper方法來定義輔助類使用

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 

# my_mailer.rb 
class MyMailer < ActionMailer::Base 
    helper MailerHelper 
    … 
end 

,那麼你可以使用視圖的方法爲好。

+0

太棒了,工作! – DJTripleThreat 2010-09-10 01:24:24

+4

太好了。將'包含MailerHelper'添加到'MyMailer 2014-01-05 15:39:05

10

這將是值得看的to_sentence擴展方法爲rails提供的數組。

+0

+1感謝您的提示。 – DJTripleThreat 2010-09-10 23:23:33

4

+1,工作得很好,只是一點點修正:

你必須使用模塊,而不是在幫助文件:

# mailer_helper.rb 
module MailerHelper 
    def and_join(arr) 
    # whatever … 
    end 
end 
4

的已經回答的問題,但我沒有從其他SO響應中獲得要修改的地方/文件。這是我如何做的:

在應用程序的底部/配置/初始化/ devise.rb可以補充一點:

Devise::Mailer.class_eval do 
    helper :application # includes "ApplicationHelper" 
end 

這個例子將包括在/ app /傭工/ application_helper方法。 RB。您可以改爲包含其他幫助程序文件 - 例如,如果該方法僅用於郵件程序或僅用於其他控制器。我需要的def被全部使用,所以我把它放在那個文件中,這樣所有的視圖都可以訪問它。

0

在我的情況下,爲Rails 5.1,我不得不同時使用包括和輔助方法,像這樣:

include ApplicationHelper 
helper :application 

然後就是繼續正常使用該方法。

class MyMailer < ActionMailer::Base 
    include ApplicationHelper 
    helper :application 

    def my_mailer_method 
    my_helper_method_declared_in_application_helper 
    .. 
    end 
end 
相關問題