##simple_formatの使い方
「railsでtext_areaの改行をviewへ反映させたい!」「改行して打ち込んだのになんか長い一文になっちゃう!」なんてことありますよね!
テキストの改行をviewへ反映する際はヘルパーメソッドのsimple_formatが有効です。
使い方は至って簡単。
simple_format(任意のテキスト)
これだけで改行をviewへ反映させることが出来ます。
text = '…ああああ!!
あああ……'
<%= simple_format(text) %>
…ああああ!!
あああ……
simple_formatなだけに非常にシンプルですね。
##なんか<>で囲ったら出力されないんだけど…
そうなんですよ。困りましたね。
通常、railsではデフォルトでテキストがhtmlエスケープされています。
つまり
text = '<a href ="hoge://すごくわるいホームページ.コム">すごくわるいホームページ</a>'
<%= text %>
<a href ="hoge://すごくわるいホームページ.コム">すごくわるいホームページ</a>
こうやってちゃんとhtmlタグをエスケープして出力してくれています。
これ、truncateメソッドとかも同じね!
でもでも、実はこのsimple_format
メソッドは
表示させたい文字列を<p>
で囲ったり、改行は</br>
で置き換えたりすることで出力してくれています。
つまりそのままだとhtmlエスケープしてくれないんです。
なので以下のように書いてしまうと…
text1 = '<a href ="hoge://すごくわるいホームページ.コム">すごくわるいホームページ</a>'
text2 = '<急募!>
うちの犬の躾方法!'
<%= simple_format(text1) %>
<%= simple_format(text2) %>
すごくわるいホームページ
うちの犬の躾方法!
# 悪いホームページへの直リンが貼られてしまう…
# <急募!>がhtmlタグだと認識されてしまう…
<急募!>が消えたどころか、すごく悪いホームページへのリンクも貼られてしまいます。
##じゃあどうすんの!
textをhメソッドでhtmlエスケープしましょう!
h(text)
でテキストをhtmlエスケープできます。
htmlエスケープされたテキストをsimple_formatすれば解決です。
text1 = '<a href ="hoge://すごくわるいホームページ.コム">すごくわるいホームページ</a>'
text2 = '<急募!>
うちの犬の躾方法!'
<%= simple_format(h(text1)) %>
<%= simple_format(h(text2)) %>
<a href ="hoge://すごくわるいホームページ.コム">すごくわるいホームページ</a>
<急募!>
うちの犬の躾方法!
これで一件落着です。
##classとかオプションも使えるの?
simple_format(h(text), class: 'hogehoge', style: 'color: red;')
こんな感じでclassやstyleのオプションも設定できます。
##参考
https://railsdoc.com/view
https://qiita.com/mojihige/items/c01682774e8ef29b361f
(こっちのほうが詳しいとか言わない)