Как передать переменные в render_to_string? - PullRequest
32 голосов
/ 15 сентября 2010

Попытка сделать следующее

@message = render_to_string ( :sender => sender, :template => "template" )          

Но при доступе к @sender в шаблоне получается nil: NilClass. Дважды проверил, правильно ли я передаю переменную, и это совершенно нормально. Может быть, есть другой способ передачи переменных в render_to_string?

Ответы [ 5 ]

42 голосов
/ 15 сентября 2010

Это может быть синтаксис, который вы используете. Попробуйте использовать аргумент :locals:

@m = render_to_string :template => "template", :locals => {:sender => sender}

Тогда вам просто нужно получить доступ к sender (без @) как локальной переменной внутри шаблона.

12 голосов
/ 11 июня 2016

Вот решение Джейсона Кима , которое он написал в комментарии, который работал для меня:

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' }
)

Подробнее здесь

2 голосов
/ 25 июня 2015

Попробуйте это:

ac = ActionController::Base.new()  
ac.render_to_string(:partial => 'path to your partial',:locals => {:varable => your variables})
2 голосов
/ 10 сентября 2014

Я пытался визуализировать другой формат частичного в render_to_string.Вот что мне действительно понравилось:

render_to_string (: частичный => частичный_файл.html ',: locals => {: переменная => переменная},: формат =>: HTML)

где имя файла было _partial_file.html.erb.

0 голосов
/ 14 февраля 2014

В рельсах 4.0.2 это сработало:

render_to_string(partial: 'path/to/partial', locals: { argument: 'value'}
...