Как передать переменные в render_to_string?
Попытка сделать следующее
@message = render_to_string ( :sender => sender, :template => "template" )
Но при доступе к @sender в шаблоне получается nil:NilClass. Дважды проверил, правильно ли я передаю переменную, и это совершенно нормально. Может быть, есть другой способ передачи переменных в render_to_string?
5 ответов
Это может быть синтаксис, который вы используете. Попробуйте использовать :locals
аргумент:
@m = render_to_string :template => "template", :locals => {:sender => sender}
Тогда вам просто нужно получить доступ sender
(без @
) как локальная переменная внутри шаблона.
Вот решение Jason Kim, которое он написал в комментарии, который работал для меня:
ActionController::Base.new.render_to_string(
"user_mailer/welcome_email.html.erb", locals: { :@user => user}
)
Пожалуйста, обратите внимание :@user => value
немного.
В Rails 5 (атм в бета-версии):
ApplicationController.render(
file: 'path',
assigns: { foo: 'bar' }
)
Попробуй это:
ac = ActionController::Base.new()
ac.render_to_string(:partial => 'path to your partial',:locals => {:varable => your variables})
Я пытался визуализировать другой формат частичного в render_to_string. То, что действительно работало для меня, было:
render_to_string (: частичный => "частичный_файл.html",:locals => {: переменная => переменная},: формат =>: HTML)
где имя файла было _partial_file.html.erb
,
В рельсах 4.0.2 это работало:
render_to_string(partial: 'path/to/partial', locals: { argument: 'value'}