我几乎查看过去几乎每一个问题都无济于事。
我有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('{"id":1,"user_id":1,"category_id":1,"type_id":1,"title":"test ...blablabla...":"2017-08-17T17:39:15.278Z"}');
(我发现了一个有趣的事情。如果我只是在没有代码块的情况下将它粘贴在这里,上面的内容就会很好用。这是什么?)
未捕获的TypeError:OUR_SELLER_DB.push不是函数 在主要:95
那为什么它会变成一种疯狂的形式呢? 最重要的是,我如何解决这个问题并得到我想要的JS变量?
答案 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转义。