text_areaに入力したままに表示する(rails)
form_forやform_withのtext_areaに文字を入力した際、改行を付けて入力しても、それらが出力されないということがありました。
最初はMySQLの設定で改行も含めて表示する方法について調べていましたが、railsヘルパーの「simple_format」で簡単に実現することがわかりました。 また、さらに調べているとより便利な「safe_join」を利用する方法を見つけました。
simple_format
例えばこのようなform_withがある場合
「new.html.erb」
<%= form_with model: contest do |f| %> <%= f.label :main, "コンテスト内容" %> <%= f.text_area :main %> <%= f.submit "保存する" %> <% end %>
下記のように入力し
おはよう(1段改行) こんにちは(2段改行) こんばんは
下記で表示すると
「show.html.erb」
<%=simple_format(@contest.main)%>
おはよう こんにちは こんばんは
と表示され、1段の改行はできているものの、2段の改行が1段になってしまっています。
2段の改行を実現するため「safe_join」ヘルパーを使ってみます。 また「safe_join」ヘルパーでは段落も付けられるように設定することができます。
「show.html.erb」
<%=simple_format(@contest.main)%> ↓ <%= safe_join(@contest.main.split("\n"),tag(:br)) %>
改めて下記のように段落もつけて入力してみた結果、無事に入力したとおりに表示することができました!
おはよう こんにちは こんばんは