serializeメソッドを使用すると、ハッシュのようなオブジェクトをYAML文字列としてデータベースに格納できます。しかし、私は最近、ユーザーが自分の文字列を入力してコントローラがその文字列からハッシュを作成できるようにするテキストフィールドを必要としていることがわかりました。テキストフィールドからのYAMLの取得
<%= f.text_field :yaml, :value => '--- \nlast_name: Smith\nfirst_name: Joe\n' %>
はい、一重引用符を使用したいと思います。\ nをディスプレイに保存します。しかし、問題は、結果として、結果の文字列オブジェクトがエスケープします、ということである:
--- \\nlast_name: Smith\\nfirst_name: Joe\\n
私は2つの正規表現による文字列を実行します。最初は、単一のバックスラッシュと二重のバックスラッシュを置き換えます。次に\ n(2文字)を\ n(特殊1文字)に変換します。だから私のコントローラで
:
yhash = YAML.load(params[:form][:yaml].gsub(/\\\\/, "\\").gsub(/\\n/, "\n"))
は、この機能するようになりましたが、とても複雑なようです。ユーザーがyamlを送信するためのよりエレガントな方法はありますか?
これをより簡潔に言い換えることができますか? –
あなたはこれをやりたい理由を説明できますか? Railsはセキュリティ侵害を避けるためにこのテキストをエスケープします。ユーザーからのデータ構造を作成してシリアルコードを入力し、それを危険にさらす可能性があります。これのためのユースケースのように思えます。 –
+1私は同意します。そこには本当の "悪用"の悪臭があります。 –