用simple-quote替换双引号字符串

问题描述 投票:0回答:2

我正在使用Middleman和Snipcart开发电子商务项目。我需要使用多种货币,Snipcart文档说我只需要在我的购买按钮中设置一个带有像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>

这是snipcart(购买)按钮助手:

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
json ruby dataset middleman snipcart
2个回答
2
投票

您正在寻找的可能不是单引号的双引号,而是这个帮手:https://apidock.com/rails/ActionView/Helpers/JavaScriptHelper/escape_javascript

这将逃避双引号和单引号。

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

1
投票

这有用吗?

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
© www.soinside.com 2019 - 2024. All rights reserved.