Подтвердить что ты не робот

Где я помещаю вспомогательные методы для представлений ActionMailer?

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

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

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

4b9b3361

Ответ 1

Используйте метод helper в вашей почтовой программе, чтобы определить вспомогательный класс для использования

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

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

то вы также можете использовать методы в представлениях.

Ответ 2

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

Ответ 3

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

В нижней части app/config/initializers/devise.rb вы можете добавить это:

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

Этот пример будет включать методы в /app/helpers/application _helper.rb. Вместо этого вы можете включить другой вспомогательный файл - если, например, этот метод предназначен только для почтовой программы или используется только для одного другого контроллера. Мне нужен раздел def, поэтому я вставляю его в этот файл, чтобы просмотреть все его виды.

Ответ 4

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

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

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

Ответ 5

В моем случае для Rails 5.1 мне пришлось использовать как include, так и вспомогательные методы, например:

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

Ответ 6

Если у вас есть несколько методов off, которые вы хотите использовать в представлении, вы можете использовать helper_method непосредственно в вашей почтовой программе.

class MyMailer < ApplicationMailer
  def mailer
    mail to: '', subject: ''
  end

  private

  helper_method def something_to_use_in_the_view
  end
end

something_to_use_in_the_view будет доступно на ваш взгляд.