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