地方でリモートワーク

プログラミング、先物、fx,仮想通貨なんでもやります

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