Где я помещаю вспомогательные методы для представлений ActionMailer?
У меня есть метод, который принимает массив строк и соединяет их, чтобы они делали что-то вроде этого:
>> my_arr
=> ["A", "B", "C"]
>> and_join(my_arr)
=> "A, B, and C"
Что бы я хотел, чтобы мой почтовый ящик имел доступ, чтобы я мог выводить некоторую информацию в электронное письмо. Я не могу найти подходящее место, чтобы поместить его и поместить в файл application_helper.rb, и он не найдет его там. Куда он должен идти?
Ответы
Ответ 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
будет доступно на ваш взгляд.