Как передать переменные в 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'}
Другие вопросы по тегам