2016-12-22 18 views
1

にバックスラッシュを保つ私は、私の見解の形でこのラインを持っている:RAILS JSONが文字列

<%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+") %> 

それが結果生成されます。

"patterns":[".+\\.runsheet\\..+"] 

私が本当に欲しいものではありません。 私の質問私のデータベースに保存した後、バックスラッシュを維持する方法ですか?

これは私がしたい正確に何である:"patterns":[".+\.runsheet\..+”]

私はこれをしようとしました:<%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+"), class: "val_runsheet_all" %>と結果:

:ここ "patterns":[\".+\\.runsheet\\..+\”]

UPDATE 1

は、HTML出力であります

<input type="hidden" name="ng_b2b_configuration[value][endpoints][][patterns][]" id="ng_b2b_configuration_value_endpoints__patterns_" value=".+\.runsheet\..+"> 
+0

しかし、Ruby(すなわちERB)の '。\ \ runsheet \ .. + ''は ''。+。runsheet .. +' 'というだけの複雑な方法です。見ている? ''があなたのHTMLにどのように見えるのか、そして '' params''にログが何を載せているかを含めると役に立ちます。そして二重引用符で囲まれたRuby文字列 '\\。'の中には、1つのバックスラッシュの後ろにピリオドが続きます。 –

+0

@muistooshort ops申し訳ありません。私は上記の私の質問を編集する。 – AmirolAhmad

答えて

1

value=".+\.runsheet\..+" HTMLのは、Rubyで'.+\.runsheet\..+'となりますので、あなたはどこかで混乱しています。あなたは何もしません(トリッキーなことはありません)。

".+\.runsheet\..+" 

(RubyまたはJSON)バックスラッシュは、Rubyの二重引用符付き文字列とJSON形式の文字列の両方で特別な意味を持ちます。 .を逃れるためにバックスラッシュを必要としないので、どちらもそこに置くことはありません。しかし、\はRubyの二重引用符で囲まれた文字列とJSONの両方でエスケープ文字として特別な意味を持っているため、\\\のように見えますが、どちらもエスケープ文字をエスケープして\という特別な意味をエスケープする必要があります。 irb

行くと言う:

puts ".+\.runsheet\..+" 

とあなたが得るものを参照してください。そして、言う:

puts ".+\\.runsheet\\..+" 

とあなたが得るものを参照してください。最初はあなたを与える:

.+.runsheet..+ 

と第二:

.+\.runsheet\..+ 

その後、あなたはinspectが使用するエスケープを避けるように、結果を確認するためにputsを使用して、いくつかのto_jsonコール(再び投げることができます)同様のことが起こっているのが見えます。

+0

大きな説明をありがとう。実際のバックスラッシュではない二重バックスラッシュについて理解しました。また、ここから情報を得ました:http://stackoverflow.com/questions/14714081/cannot-keep-backslash-in-string-in-ruby-code – AmirolAhmad