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 %>
コメントを残す