How to pass variables to render_to_string?
Solution 1
It might be the syntax you're using. Try using the :locals
argument:
@m = render_to_string :template => "template", :locals => {:sender => sender}
Then you just need to access sender
(without an @
) as a local variable inside the template.
Solution 2
Here's Jason Kim's solution he wrote in a comment which worked for me:
ActionController::Base.new.render_to_string(
"user_mailer/welcome_email.html.erb", locals: { :@user => user}
)
Please mind the :@user => value
bit.
In Rails 5 (atm in beta):
ApplicationController.render(
file: 'path',
assigns: { foo: 'bar' }
)
Solution 3
Try this:
ac = ActionController::Base.new()
ac.render_to_string(:partial => 'path to your partial',:locals => {:varable => your variables})
Solution 4
In rails 4.0.2 this worked:
render_to_string(partial: 'path/to/partial', locals: { argument: 'value'}
Solution 5
I was trying to render a different format of partial in render_to_string. The thing which really worked for me was:
render_to_string(:partial => 'partial_file.html', :locals => {:variable => variable}, :format => :html)
where the name of the file was _partial_file.html.erb
.
Arty
Updated on June 12, 2020Comments
-
Arty almost 4 years
Trying to do the following
@message = render_to_string ( :sender => sender, :template => "template" )
But when accessing @sender in template it turns out to be nil:NilClass. Double checked if I pass the right variable and it's totally fine. Maybe there are other way to pass variables to render_to_string?
-
Peter Brown over 13 yearsJust noticed you were trying to access sender as
@sender
in your view. Not sure about your original code, but if you use the locals syntax, it will be a local variable (not an instance variable) and will be accessed without the@
-
MrYoshiji over 11 yearsYour solution actually work. You can pass locals as you said and access them as local variables, not instance variables.
-
Jason Kim almost 11 yearsI've been trying to use
render_to_string
from model. In order to use with as instance variable, I had to doActionController::Base.new.render_to_string(:template => "template", :locals => {:@sender => sender})
-
Sergey Alekseev over 3 yearsDoesn't work in the latest 4-2-stable github.com/rails/rails/commit/…