D-Nice D-Nice - 4 months ago 10
Javascript Question

Print valid, non-escaped JSON in a view with Rails

I've tried everything. Every combination of the helpers

raw
,
html_safe
to_json
including some attempts with
::JSON.encode
and
CGI.unescape
. The issue is that regardless of what I do, I can't print well-formed JSON in a view. It's always HTML escaped.

Here's the code in my view:

var campaignData<%= "=" + (raw @campaign.to_json) if @campaign %>;


In my case, it's always the quotes that are escaped as ". I would just do a gsub on the quotes, but that is a terrible solution to what IMO ought to be a very simple, well documented use case.

Answer

The problem here is with the "=" string. As it's considered unsafe, it taints the other string.

You can probably do either:

raw("=" + @campaign.to_json)

or

"= #{@campaign.to_json}".html_safe

which are roughly the same.