7

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.

2 Answers 2

15

Use escape_javascript function:

var foo = "<%= escape_javascript(render :partial => 'foo') %>";
Sign up to request clarification or add additional context in comments.

1 Comment

If you find escape_javascript to be too much to type, remember that it is aliased as j.
1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.