Подтвердить что ты не робот

Как передать переменные render_to_string?

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

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

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

4b9b3361

Ответ 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'}