Ответ 1
Как (почти) всегда в Rails, существует способ для этого: ActionController::Base#render_to_string
В Rails 3 этот метод был перемещен в AbstractController::Rendering#render_to_string
.
Я хотел бы отправлять электронные письма из таблицы каждую ночь в полночь, поэтому я создал модель для отслеживания всех сообщений, которые нужно отправить. Эта модель Communication
хранит, с какими буквами отправляется письмо, и из содержимого письма, которое должно быть отправлено как html. Пользователь вводит критерии соответствия, для которых предназначен письмо: состояние, страна, любимый цвет и т.д., Который возвращает список допустимых совпадений.
Этот список допустимых совпадений повторяется, и для каждого создается новое сообщение. Как визуализировать содержимое частичного представления для строки, которая будет храниться в базе данных для доставки в полночь.
@communication = Communication.new(params[:communication])
@communication.body = //Render Partial with local variables to string here
8 января 2010 г. Я реализовал решение, предложенное нейтрино, и мой код выглядит следующим образом:
@communication.message_body = render_to_string(
:partial => "letters/small_letter",
:locals => { :quote => @quote})
Недостатком этого подхода является то, что он требует контекста, поэтому он должен отображаться внутри контроллера, это исключает генерирование электронной почты с использованием файла рейка. Как указывали другие, подход использования модели связи может ввести некоторую ненужную сложность. В это время, поскольку условия, которые я использую для создания списка получателей, никогда не сохраняются, я решил продолжить использование модели связи.
Как (почти) всегда в Rails, существует способ для этого: ActionController::Base#render_to_string
В Rails 3 этот метод был перемещен в AbstractController::Rendering#render_to_string
.
Возможно, вам захочется взглянуть на методы визуализации шаблона вне контроллера, например:
http://geek.swombat.com/rails-rendering-templates-outside-of-a-contro
Как говорится, вероятно, лучше использовать встроенный класс отправки электронной почты ActionMailer:: Base, который может отображать шаблоны для вас. Сохранение параметров в вашей модели связи, вероятно, лучше, чем сохранение развернутого HTML, поскольку эти параметры могут быть сериализованы и позже перенаправлены на вызов типа "send_X_notification".
Они могут быть построены с использованием генератора:
script/generate mailer communications_mailer
вы можете попробовать это (в консоли rails):
class StaticRender < ActionController::Base
def self.render_erb(template_path, params)
view = ActionView::Base.new(ActionController::Base.view_paths, {})
class << view
include ApplicationHelper
end
view.render(:file => "#{template_path}.html.haml", :locals => params, :layout => false)
end
end
StaticRender.render_erb("home", {})
вам нужно иметь представление "домой" для этого....
Вы пробовали action mailer? Он также отобразит ваши представления и предоставит поддержку активной записи.