2017-09-01 34 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

相關問題