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