2017-12-29 26 views
0

私はMiddlemanとSnipcartを使用して電子商取引プロジェクトを開発しています。私は複数通貨を使用する必要があります。Snipcartのドキュメントでは、購入ボタンにdata-item-price{"usd": 20, "eur": 25}のようなJSON配列を設定するだけでいいとのことです。購入ボタンを置くためのデータセットが他にもあるので、私はヘルパーを作ることにしました。二重引用符の文字列を一重引用符で置き換えます。

このヘルパーは正確に私が望むものを返しますが、データ項目価格は二重引用符で囲まれ、一重引用符ではありません。現時点では、コードは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

おそらく単一引用符と二重引用符ではありませんが、このヘルパー::ここで

はsnipcartボタンヘルパーを(購入する)だhttps://apidock.com/rails/ActionView/Helpers/JavaScriptHelper/escape_javascript

これはダブルとシングル引用符をエスケープします。

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

'j'ヘルパー(または' escape_javascript')を使用 'データ項目価格= "{\" USDの\"を返し:20 、\ "eur \":22} "、Snipcartはもう理解しません。 'Uncaught SyntaxError:JSONの位置0の予期しないトークンN 'というエラーがコンソールに表示されます。 –

+0

'data-item-price =" {\ "usd \":20、\ "eur \":22} "これは有効なjson属性であるように見えます。エラーが受信側にある可能性がありますか? –

+0

また、エラーメッセージが示唆する出力文字列に 'N 'もありません。だから、エラーは今他の何かから来ているのでしょうか? –

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 
関連する問題