改行コードを表示に反映させる

app/helpers/application_helper.rb にこんな感じに記述。

module ApplicationHelper
  # HTMLで書けない文字の実体参照と改行コードのHTMLへの置換を行う
  def hbr(target)
  target = html_escape(target)
  target.gsub(/\r\n|\r|\n/, "<br />")
  end
end

使用時は

  <%=h @note.more_notes %>

という感じになっているところを

  <%=hbr @note.more_notes %>

とすればオッケ。

Railsには simple_format という関数が元々あるんだけど、改行を2つ続けると

に自動変換する。
違いとしてはこんな感じ。

<!--
元入力内容↓
aaaaa
aaaa
aa
a


aaaaa
aaaa
aa
a 
-->

<!-- simple_format ここから -->
<p>
<p>aaaaa
<br />aaaa
<br />aa
<br />a</p>

<p>aaaaa
<br />aaaa
<br />aa
<br />a</p>
</p>
<!-- simple_format ここまで -->

<!-- hbr ここから -->
<p>
aaaaa<br />aaaa<br />aa<br />a<br /><br /><br />aaaaa<br />aaaa<br />aa<br />a
</p>
<!-- hbr ここまで -->

文章として考えれば改行2つで段落扱いにするのが正しいんだけど、そうすると2つ以上改行した場合無視される。
ここんとこは使い方によるのかなという感じ。


参考(というかそのまんま):
改行ありで入力した値をきちんと表示させる | Katawara.*
http://www.katawara.com/2008/06/hbr/