2010-09-10 3 views
21

У меня есть метод, который принимает массив строк и соединяет их так, что они делают что-то вроде этого:Где я могу поместить вспомогательные методы для представлений ActionMailer?

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

Что я хотел бы мой почтовик, чтобы иметь доступ к так что я может выводить некоторую информацию в сообщение электронной почты. Я не могу найти подходящее место, чтобы поместить его и поместить в файл application_helper.rb, и он не найдет его там. Куда он должен идти?

+3

Стоит посмотреть на метод расширения 'to_sentence' для массивов, который предоставляет рельсы. – Shadwell

+0

@Shadwell, опубликуйте это как ответ, и я сделаю +1 это. Это именно то, что я искал. – DJTripleThreat

+0

аналогичный - http://amolnpujari.wordpress.com/2013/12/27/highlight-changes-being-made-on-activerecord-object-inside-mail/ –

ответ

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

+4

Отлично. Добавьте 'include MailerHelper' в' MyMailer

10

Стоит обратить внимание на способ расширения to_sentence для массивов, который предоставляет рельсы.

+0

+1 Спасибо за этот отзыв. – DJTripleThreat

4

+1, работал отлично, только немного коррекции:

Вы должны использовать модуль вместо класса в хелперов файле:

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

уже ответил вопрос, но я не получил, где/what-file, чтобы изменить из других ответов SO. Вот как я это сделал:

В нижней части приложения/конфигурации/Инициализаторы/devise.rb вы можете добавить следующее:

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

Этот пример будет включать в себя методы в/приложение/хелперов/application_helper. гь. Вместо этого вы можете включить другой вспомогательный файл - если, например, этот метод предназначен только для почтовой программы или используется только для одного другого контроллера. 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 
Смежные вопросы