Rails Tutorial 7章 編集中 ユーザー登録フォーム(エラーメッセージ)

エラーメッセージ


errors.full_messagesオブジェクトはエラーメッセージの配列を持ってる。

例えば

$ rails console
.
>>user.save
=>false
>>user.error.full_message
=> ["Email is invalid", "Password is too short (minimum is 6 characters)"]

ここでは、保存に失敗した際、newページに戻って、エラーメッセージのパーシャル出力して、エラーメッセージを表示する。

app/views/users/new.html.erb
<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@user) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= f.label :name %>
      <%= f.text_field :name, class: 'form-control' %>

      <%= f.label :email %>
      <%= f.email_field :email, class: 'form-control' %>

      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>

      <%= f.label :password_confirmation, "Confirmation" %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>

      <%= f.submit "Create my account", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>


パーシャルは、'shared/error_messages'てやつ
複数のビューで使用されるパーシャルは、sharedってディレクトリによく置かれるらしい。

sharedを作る

$ mkdir app/views/shared

中身 (_error_messages.html.erb)を作成

app/views/shared/_error_messages.html.erb
<% if @user.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-danger">
      The form contains <%= pluralize(@user.errors.count, "error") %>.
    </div>
    <ul>
    <% @user.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>


これによっていろんなものが追加された

例えば、countメソッド

>>user.errors.count
=>2

any? empty? メソッド

>>user.errors.any?
=>true
>>user.errors.empty?
=>false