全てのフォームで、エラーメッセージを使いまわせるようにします。
##リファクタリング前
以下のような書き方だと、@task
に対するエラーメッセージしか表示できないので、エラーメッセージ出力部分の記述をパーシャルに分けて使い回すことができません。
view
<h1>新規タスク</h1>
<% if @task.errors.any? %>
<div>
<ul style="color: red">
<% @task.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= form_for(@task) do |f| %>
.
.
##リファクタリング後
フォームの中に<%= render 'shared/error_messages', object: f.object %>
と書き込み
view
<h1>新規タスク</h1>
<%= form_for(@task) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
・
・
パーシャルでobject.errors
を使ってエラーメッセージを呼び出します。
shared/error_messages.html.erb
<% if object.errors.any? %>
<div>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
##注意
エラーメッセージが特定のActive Recordオブジェクトに関連付けられている場合のみ使える
→SessionはActive Recordオブジェクトに管理づけられていないので、ログインなどでは使えない
→flashで代用する必要がある