#やりたいこと
フォームでのエラー文をflashメッセージを用いて下記のように表示したい
お届け先の内容に不備があります
・住所は1文字以上で入力してください
・郵便番号は不正な値です
・宛名は1文字以上で入力してください
#方法
モデル名はorderで@orderにエラー文がある場合
controllers
flash[:danger] = "お届け先の内容に不備があります<br>・#{@order.errors.full_messages.join('<br>・')}"
view
<% flash.each do |key, value| %>
<p class="alert alert-<%= key %>">
<%= sanitize value, tags: %w(br) %>
</p>
<% end %>
#内容
@order.errors.full_messagesの中身例
["住所は1文字以上で入力してください", "郵便番号は不正な値です", "宛名は1文字以上で入力してください"]
@order.errors.full_messagesの中身は上記のように格納されているため、配列の要素をjoinを用いて結合する。
その際に、区切り文字に"<br>・"とするとflashメッセージは以下になる
flashの中身例
お届け先の内容に不備があります<br>・住所は1文字以上で入力してください<br>・郵便番号は不正な値です<br>・宛名は1文字以上で入力してください
これを、viewに<br>を改行を意味するものであると認識させた上で、表示させたいためsanitizeを用いる
今回は<br>のみ許可している
(sanitize: 文字列内の指定したHTMLタグや属性を許可するもの)
<%= sanitize value, tags: %w(br) %>