Как передать переменные для рендеринга в string?

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

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

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

5 ответов


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

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

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


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

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

здесь


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

render_to_string (: partial => 'partial_file.HTML-код', :местные жители => {:переменная => переменная}, :формат => :HTML-код)

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


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

ac = ActionController::Base.new()  
ac.render_to_string(:partial => 'path to your partial',:locals => {:varable => your variables})

в rails 4.0.2 это сработало:

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