beryuのチラシの裏

新米エンジニアの個人的なメモ

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)) %>

改めて下記のように段落もつけて入力してみた結果、無事に入力したとおりに表示することができました!

おはよう
こんにちは

 こんばんは