様々な改行コードを統一して\n
に変換して、DB保存したいと思ったが、改行コードではなく文字列として保存されてしまいハマりました
最初に書いたコード
str = 'Hello! \nWorld' str.gsub(/(\\r\\n|\\r|\\n)/, '\n') User.name = str User.save! => "Hello! \\nWorld"
これだと\n
が文字列として保存されてしまいました。
\n
は特殊文字だからエスケープとかすればいいのかな?と思い次にこんなコードを書きました
次に試してみたコード
str = 'Hello! \nWorld' str.gsub(/(\\r\\n|\\r|\\n)/, '\\\\n') => "Hello! \\nWorld"
こちらもうまく動かず よく調べてみると
正しく改行されるコード
ダブルクォーテーションにすればよいだけでした
バックスラッシュ記法は文字列をダブルクオーテーションで囲った場合とシングルクオーテーションで囲った場合で扱いが異なります。
引用:バックスラッシュ記法によるエスケープ
str = 'Hello! \nWorld' str.gsub(/(\\r\\n|\\r|\\n)/, "\n") User.name = str User.save! => "Hello! \n" + "World"