ruby-on-rails - type - rails test mailer preview




Где я могу разместить вспомогательные методы для представлений ActionMailer? (4)

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

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

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


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

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

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

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

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

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

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

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

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


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





helpermethods