rails text_areaで改行入力→そのまま表示させる。


ぶっちゃけこちらの記事参照しただけです笑
https://qiita.com/kamotetu/items/1aa94994985c720668e4

form_forやform_withで
テキスト入力時に改行→全然できてなーい!
ってなりました。
ちゃんとそのまま表示させたいなと。

問題

入力フォーム

new.html.erb
<div class="from-group mb-4">
   <%= f.label :introduction, "紹介文", class: "form-label" %><br />
   <%=f.text_area :introduction, class: "form-control", id:"user-introduction", size: "90x5", maxlength: "1000", placeholder: "紹介文を書く"%>
</div>

投稿を入力

表示

show.html.erb

そうすると

改行できてない。
これを解決したいということ。

解決法

show.html.erb
<%=safe_join(@user.introduction.split("\n"),tag(:br))%>

に変えてあげるだけで

うまくいった!

 
この記述は

  • 連続した改行(空白のままの改行)
  • 段落(スペースキーで1文字分の空白を作る)

といったことが可能になります。

ちなみに

入力ホームにバリデーションかけてない際、空白で送信した場合エラーになりました。
そんな時は

show.html.erb
<%if @user.introduction.nil? %>   # 紹介文が「空」のままだとエラーが出るのでnil?=trueの時を追加
  <%[email protected]%>       # バリデーションは無し 
<% else %>
  <%=safe_join(@user.introduction.split("\n"),tag(:br))%>    # 紹介文が「空」じゃない時は正常に反映する
<%end %>

で解決しました。