rails ar_mailer и ar_sendmail - как добавить настраиваемое поле в электронную почту

У меня есть приложение Rails 2.2.2 с использованием ArMailer и ArSendmail, которое делает запись электронной почты. Я добавил priority поле к emails таблицу, и сейчас пытаюсь записать это в методы ArMailer, чтобы я мог убедиться, что, например, письма "Я забыл свой пароль" попадают в начало очереди писем.

В Rails вы можете создать класс (UserNotify) в моем случае, который наследуется от ArMailer. Это методы, где вы можете установить @recipients, @from, @subject и т. д., которые входят в соответствующие поля создаваемой записи электронной почты.

Итак, у вас есть, например, метод Forgot_password, как это:

def forgot_password(user)
  @recipients = "#{user.email}"
  @from       = "info@example.com"
  @sent_on    = Time.now
  @headers['Content-Type'] = "text/plain; charset=#{UserSystem::CONFIG[:mail_charset]}; format=flowed"
  @body["host"] = user.music_service.host
  @body["user"] = user    
  @priority = 2
  @body["token"] = user.generate_security_token
  @subject = "Your request to reset your example.com password"
end

Этот метод затем будет называться как UserNotify.deliver_forgot_password(@user) (соглашение с классами ArMailer заключается в том, что вы вызываете такие методы, как deliver_<methodname>).

Я пытаюсь написать в priority поле здесь, устанавливая переменную экземпляра, но она игнорируется - я предполагаю, что механизм ArMailer или ArSendmail, который записывает запись Email в базу данных, имеет определенный список переменных для поиска, и он не знать о @priority,

Создание записи электронной почты выполняется ArMailer.perform_delivery_activerecord, который выглядит так:

def perform_delivery_activerecord(mail)
  begin 
    destinations = [mail.destinations].flatten.uniq.compact_blank
  rescue
    destinations = mail.destinations
  end
  unless destinations.respond_to?(:blank?) && destinations.blank? 
    destinations.each do |destination|
      @@email_class.create :mail => mail.encoded, :to => destination, :from => mail.from.first
    end
  end
end

Может быть, это последний метод, который мне нужно изменить, чтобы установить поле приоритета? Благодарен за любой совет, спасибо.

0 ответов

Другие вопросы по тегам