将Rails DB as_json.to_json嵌入到Javascript中无效。 (变成"东西)

时间:2017-08-17 18:27:42

标签: javascript jquery ruby-on-rails ruby

我几乎查看过去几乎每一个问题都无济于事。

我有main.html.erb file,我在其中混合html / erb / javascript。 (我知道这不是一件好事,但我仍然对资产管道感到困惑,这是一个相当小的项目。)

在这里,我想把一些从控制器调用的数据库放到javascript代码中,这样我就可以把我的Rails DB放到JSON形式的Javascript变量中。

这是我的.erb代码:

//I want to put my Rails data into JS variable, in JSON form.

var OUR_SELLER_DB = new Object(); 

<% @db_json.each do |p|%>
    OUR_SELLER_DB.push(<%=p.to_json %>);
<% end %> 

和我的控制器:

@db = Post.all  
@db_json = @db.as_json

我尝试调试并检查了我的浏览器控制台。似乎p迭代器应该是@db_json中的每个元素都以某种奇怪的形状出现。

OUR_SELLER_DB.push('{&quot;id&quot;:1,&quot;user_id&quot;:1,&quot;category_id&quot;:1,&quot;type_id&quot;:1,&quot;title&quot;:&quot;test ...blablabla...&quot;:&quot;2017-08-17T17:39:15.278Z&quot;}');

(我发现了一个有趣的事情。如果我只是在没有代码块的情况下将它粘贴在这里,上面的内容就会很好用。这是什么?)

  

未捕获的TypeError:OUR_SELLER_DB.push不是函数       在主要:95

那为什么它会变成一种疯狂的形式呢? 最重要的是,我如何解决这个问题并得到我想要的JS变量?

2 个答案:

答案 0 :(得分:2)

您的OUR_SELLER_DB是一个对象。对象确实没有方法push。你的意思是它是一个阵列吗?

  

那为什么它会变成一种疯狂的形式?

那&#34;疯狂的形式&#34;被称为&#34; html转义&#34;。如果你默认不这样做,那么坏事就会发生。试试这个绕过转义:

<%= raw p.to_json %>

答案 1 :(得分:1)

如果你打算做的是输出一个数组,你可以打电话:

var OUR_SELLER_DB = <%= raw( @db_json ) %>

使用raw将避免引用被转义,因为rails使用默认情况下的安全方案,其中字符串是不受信任的,默认情况下是html转义。