Письма в Rails - как сохранить код презентации в моих моделях - PullRequest
1 голос
/ 02 октября 2010

Для моего приложения на Rails мы разработали наполовину домашнюю систему электронной почты.Мы создали модель под названием Email, которая затем добавляется в очередь для отправки (с использованием веб-службы).

Для создания шаблонов мы просто объединяем строки в модели, например:

Email < ActiveRecord::Base

   def self.stock_message(recipient)
     email = Email.create do |e|
       e.recipient = recipient
       e.message = String.new
       e.message << "first line <br />"
       e.message << "second line <br />"
     end 
   end

end

#to send:
e = Email.stock_message "foo@bar.baz"

Это явно нарушает MVC и действительно становится проблемой, когда я хочу отформатировать строки, используя вспомогательные методы.Как правильно отделить код вида от модели?

Ответы [ 3 ]

5 голосов
/ 02 октября 2010

На этом сайте Rails есть специальное руководство .Короче говоря, вы можете поместить свои шаблоны электронной почты в папку views, и они будут рассматриваться почти так же, как традиционные HTML-шаблоны для веб-браузеров.

Кроме того, по моему опыту, обработка электронной почты очень противоречива в разныхверсии Rails, так что вам может понадобиться немного покопаться.

2 голосов
/ 10 октября 2010

Я думаю, что вы можете использовать метод render_to_string, но так как он недоступен в модели, вам нужно вызвать его из контроллера:

# model
Email < ActiveRecord::Base
  def self.stock_message(recipient, message)
    email = Email.create do |e|
      e.recipient = recipient
      e.message = message
    end 
  end
end

# controller
e = Email.stock_message "foo@bar.baz", render_to_string "email/my_email"

Если вам нужно передать некоторые переменные для визуализации метода,затем просто добавьте :locals => {:var1 => value, :var2 => value2}.

# view
first line <br />
second line <br />

. В этом примере вы должны хранить представления для электронных писем в каталоге app/views/emails/.

Однако, как сказал @David, почему бы не использовать почтовую программу, предоставленнуюRails?Это было бы лучшее решение.

0 голосов
/ 09 октября 2010

Почему вы используете «наполовину самодельную систему электронной почты» вместо той, которую предоставляет Rails?

http://guides.rubyonrails.org/action_mailer_basics.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...