У меня есть фрагмент кода JavaScript в приложении Ruby on Rails, который говорит на удаленном сервере и передает его JSON, состоящий из массива словарей, содержащих такие вещи, как SKU, цена и т.д.
Простое создание в 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 %>"
}
Проблема, я думаю, состоит в том, что сущности бегут. Если я использую предупреждение для проверки возвращаемого значения, я вижу, что все сущности, такие как кавычки, экранированы.
Другие места, где я интерполировать значения, как представляется, работают нормально. Например:
invoice_number: "<%= @order.id %>"
У других была эта проблема, но ни одно из решений, похоже, не работает в этом случае. Я попробовал raw
, html_safe
и т.д.
Я должен что-то упустить. Каков наилучший способ решить эту проблему?
Есть три проблемы.
Во-первых, вам не нужно ""
вокруг" <%= @items %>
.
Во-вторых, <%= @items %>
вставляет @items.to_s
, но {"key" => 12}.to_s
равно '{"key"=>12}'
, что не является допустимым JSON.
В-третьих, вам нужно html_safe
чтобы Rails не избежал специальных символов.
Ты получаешь:
items: <%= @items.to_json.html_safe %>