Заменить строку двойных кавычек простой кавычкой

Я использую Middleman и Snipcart для разработки проекта электронной коммерции. Мне нужно использовать мультивалютность, в документации Snipcart сказано, что мне просто нужно установить в своей кнопке покупки a data-item-price с массивом JSON, как {"usd": 20, "eur": 25}, Есть другие наборы данных, которые нужно надеть на кнопку покупки, поэтому я решил сделать помощника.

Этот помощник возвращает именно то, что я хочу, но цена элемента данных находится между двойными кавычками, а не между одинарными кавычками. На данный момент код понимается как data-item-price="{"usd":20,"eur":22}" а не как data-item-price='{"usd": 20, "eur": 22}'

Мне нужно преобразовать <button data-item-price="{"usd":20,"eur":22}">Buy</button> этим <button data-item-price='{"usd":20,"eur":22}'>Buy</button>,

Вот помощник кнопки снипкарты (купить):

def snipcart_button (p, text)
  args = {
    "class" => "snipcart-add-item",
    "data-item-id" => p.id,
    "data-item-price" => p.price.to_json,
    "data-item-name" => p[locale].name,
    "data-item-max-quantity" => p.max_quantity,
    "data-item-url" => snipcart_product_url(p),
    "data-item-image" => p.image
  }

  content_tag :button, args do
    text
  end
end

2 ответа

Решение

То, что вы ищете, вероятно, не двойные кавычки к одиночным, но этот помощник: https://apidock.com/rails/ActionView/Helpers/JavaScriptHelper/escape_javascript

Это позволит избежать двойных и одинарных кавычек.

"data-item-price" => j(p.price.to_json),

Это работает?

def snipcart_button(p, text)
  content_tag(:button, text, {
    class: 'snipcart-add-item',
    data: {
      'item-id': p.id,
      'item-price': p.price.to_json.html_safe,
      'item-name': p[locale].name,
      'item-max-quantity': p.max_quantity,
      'item-url': snipcart_product_url(p),
      'item-image': p.image
    }
  })
end

(Очень) безобразный способ будет:

def snipcart_button(p, text)
  content_tag(:button, text, {
    class: 'snipcart-add-item',
    data: {
      'item-id': p.id,
      'item-price': '',
      'item-name': p[locale].name,
      'item-max-quantity': p.max_quantity,
      'item-url': snipcart_product_url(p),
      'item-image': p.image
    }
  }).sub(/(data-item-price=)""/, "\\1'#{p.price.to_json.html_safe}'").html_safe
end
Другие вопросы по тегам