Railsでエラーメッセージのリファクタリングをしてみる

f:id:ihatov08:20160916231952j:plain

Railsでエラーメッセージのリファクタリングの1つの方法です。

インスタンスごとにコードを書くのが面倒

<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> はこの投稿の保存を禁止しています:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

エラーメッセージってたいてい、こんな感じのコードをインスタンスごとに書いていると思います。
でも何回も書くので面倒です。

flashにまとめてしまう

そんな時はflashにまとめてしまいましょう。

# hogescontroller
def create
@hoge = Hoge.new(hoge_params)
if @hoge.save
flash[:notice] = '成功しました。'
else
flash.now[:alert] = @hoge.errors.full_messages.join('<br>').html_safe
render action: :new
end
end

viewはこんな感じです。

<% flash.each do |name, msg| %>
<div class="alert alert-<%= name == 'notice' ? 'success' : 'danger' %>">
<a class='close' data-dismiss='alert'>x</a>
<%= msg %>
</div>
<% end %>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です