2016-11-23 2 views
2

、私は次のテストがあります文字列開始レール4.2.7のコンソールで

[45] pry(main)> '#$' 
=> "\#$" 
[46] pry(main)> '#@' 
=> "\#@" 
[47] pry(main)> '#!' 
=> "#!" 
[48] pry(main)> '#ab' 
=> "#ab" 

レールが唯一の文字列の前に「\」を置くようですが@または$後に#があるとき。

問題は、このテストに私を導き、私はJSONの配列を持つデータ属性をレンダリングERBファイル持っていることです。

data-xx="<%= [{xx: '#$', yy: 'yy'}.to_json, {zz: 'zzz'}.to_json] %>" 

を次にクロムコンソールで、それは

として、予期しない結果が得られます
$("#entry_show_modal_template").data('xx') 
"["{\"xx\":\"\#$\",\"yy\":\"yy\"}", "{\"zz\":\"zzz\"}"]" 

xxの値を#から変更すると、それが真実であると、なぜそのような違いがある場合や他のいくつかの文字列が、結果は配列

$("#entry_show_modal_template").data('xx') 
["{"xx":"#!","yy":"yy"}", "{"zz":"zzz"}"] 

としてOKになります誰かが知っていますか? この問題に取り組む方法はありますか?

+0

ルビーコンソールでは、aa = [{xx: '#$'、yy: 'yy'}、{zz: 'zzz'}]。to_json ===>クロムコンソールで JSON.parse(aa)を使用すると、期待される配列、文字列の補間を処理するためのRubyメソッド –

+0

ありがとう@WishZoneが得られます。あなたが正しいです。配列にto_jsonを置くだけで問題は解決されます。 –

+0

大変です!ちょうど答えを追加しました。 –

答えて

1

が正しい

自分の状況によると、この方法で試してみてください

は===>には、Chromeのコンソール

​​

===>レールコンソール

result = JSON.parse(json_values) 

あなたは期待される配列、文字列の補間物を扱うためのちょうどルビーテクニックを得ます

3

これは当てはまりません。

'#{...}'ハッシュもエスケープされます。これは再帰的/暗黙的に文字列補間を防ぐために行われます。

ルック:

$a = 'hello' 
"#$a" 
#⇒ "hello" 

がすでにのためにルビーによって解決される問題。生成された文字列をそのまま使用して、がコンソールに印刷されている方法でだまされることはありません。 mudasobwaさんのexplaination @

"\#$".length 
#⇒ 2 
"\#$" == '#$' 
#⇒ true 
"\#$"[0] 
#⇒ "#" 
関連する問題