Ruby on Rails: как передать JSON в JavaScript

1

У меня есть фрагмент кода 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 и т.д.

Я должен что-то упустить. Каков наилучший способ решить эту проблему?

Теги:
security

1 ответ

1
Лучший ответ

Есть три проблемы.

Во-первых, вам не нужно "" вокруг" <%= @items %>.

Во-вторых, <%= @items %> вставляет @items.to_s, но {"key" => 12}.to_s равно '{"key"=>12}', что не является допустимым JSON.

В-третьих, вам нужно html_safe чтобы Rails не избежал специальных символов.

Ты получаешь:

items: <%= @items.to_json.html_safe %>
  • 0
    Спасибо, Данил, но это не работает. JS дает мне синтаксическую ошибку в консоли, связанную с отсутствующей закрывающей скобкой. (??) Это разочаровывает, потому что я могу передать код с фиктивными значениями и заставить его работать, но не могу получить значения для вставки из ruby. Он действительно хочет представить эти цитаты как сущности.
  • 0
    items: "[{" sku "= & gt;" 1068R-FR "," price "= & gt; # & lt; BigDecimal: 7f8cede8d498, & 0.1901E2 & # 39;, 18 (27) & gt ;, & quot; количество & quot; = & gt; 1, & quot; валюта & quot; = & gt; & quot; EUR & quot;}] "}
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню