Is there a way to render a html.erb partial as a one line of string?
I am trying to render a _foo.html.erb partial inside a javascript, such that I can use the whole html document as a string variable.
I have tried the following code:
var foo = "<%= render :partial => "foo" %>";
And inside _foo.html.erb, let's say I have the following:
<h1>Hello</h1>
<p>World</p>
This way will give me a syntax error in javascript because there is CRLF in the partial. But if I write code like...
<h1>Hello</h1>" +
"<p>World</p>
Now, it's not an error in javascript. I can do the latter way, but it is a disaster if the partial contains a lot of lines of code with ruby script.
Would there be any alternative way?
Thanks in advance.
Use escape_javascript function:
var foo = "<%= escape_javascript(render :partial => 'foo') %>";
Quick and dirty hack:
var foo = "<%= render(:partial => "foo").gsub(/[\n\r]/, ' ') %>";
This just replaces the newlines with spaces, a no-op from the point of view of an HTML parser.
However, this is a pretty fragile way to create JavaScript objects. You'll need to account for quotes in the partial that'll make your JavaScript invalid, etc. I'd suggest trying to create JavaScript templates for the HTML you want to render and populate them with JSON versions of your Models.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With