2017-09-01 56 views
1

我的Ruby on Rails应用程序中有一段JavaScript代码片段,它与远程服务器进行通信并向它传递一个由包含诸如SKU,价格等等的字典数组组成的JSON。Ruby on Rails:如何将JSON传递给JavaScript

很简单在Ruby中产生:

@items = @order.line_items.map do |item| 
    { 
    sku: item.variant.sku, 
    price: item.variant.price 
    quantity: item.quantity 
    currency: current_user.currency 
    } 
end 

然而,当我在JavaScript中插入 - 这是行不通的。

{   
    items: "<%= @items %>" 
} 

我认为问题是,实体转义。如果我使用alert来检查返回的值,我可以看到所有实体像引号都被转义了。

我直接插值的其他地方似乎工作正常。例如:

invoice_number: "<%= @order.id %>" 

其他人有这个问题,但没有解决方案的出现在这种情况下工作。我试过raw,html_safe

我一定会错过一些东西。解决这个问题的最好方法是什么?

回答

1

有三个问题。

首先,你不需要""左右<%= @items %>

<%= @items %>插入@items.to_s,但{"key" => 12}.to_s等于'{"key"=>12}',这不是有效的JSON。你需要html_safe让Rails不能转义特殊字符。

你得到:

items: <%= @items.to_json.html_safe %> 
+0

感谢DANIL但这不起作用。 JS在控制台中给我一个与缺少的右括号相关的语法错误。 (??)这是令人沮丧的,因为我可以用虚拟值处理代码并使其工作,但无法从ruby插入值。它真的想要将这些引号表示为实体。 – hawmack13

+0

项目:“[{" SKU " = > " 1068R-FR ","价格" = >#<的BigDecimal:7f8cede8d498,' 0.1901E2 ',18(27)>,"量" = > 1,"货币" = > " EUR "}]“ } – hawmack13

+0

(这就是原始代码放入页面源代码的原因)。我尝试了几种不同的方法,但它总是将引号表示为实体。如果我手工编码,它的效果很好,但当然这不起作用。必须有一种方法可以将JSON对象从Ruby转换为JS?感谢Danil提供任何建议! – hawmack13

相关问题