目標
実装
エラーメッセージのファイル作成
app/views/layouts/_error_messeages.html.erb
<% if model.errors.any? %>
  <div id="error_explanation" class="alert alert-warning">
    <ul class="mb-0">
      <% model.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
    </ul>
  </div>
<% end %>
バリデーション
新規登録の際の制限を記述。
ここに記述した制限に引っかかった場合にエラーメッセージで表示される。
app/models/user.rb
class User < ApplicationRecord
  before_save { email.downcase! }
  validates :name, presence: true, length: { maximum: 50 }
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i },
                    uniqueness: { case_sensitive: false }
  has_secure_password
新規登録フォームにパーシャルrenderでエラーメッセージファイルを記述する。
<%= render 'layouts/error_messages', model: f.object %>
app/views/users/new.html.erb
  <h1>Sign up</h1>
    <%= form_with(model: @user) do |f| %>
     <%= render 'layouts/error_messages', model: f.object %>
    
      <div>
        <%= f.label :name, 'Name' %>
        <%= f.text_field :name, class: 'form-control' %>
      </div>
      <div>
        <%= f.label :email, 'Email' %>
        <%= f.email_field :email, class: 'form-control' %>
      </div>
      <div>
        <%= f.label :password, 'Password' %>
        <%= f.password_field :password, class: 'form-control' %>
      </div>
      <div>
        <%= f.label :password_confirmation, 'Confirmation' %>
        <%= f.password_field :password_confirmation, class: 'form-control' %>
      </div>
      <%= f.submit 'Sign up', class: 'btn btn-primary' %>
    <% end %>
これでエラーメッセージが表示されます、他のフォームも同様の方法で大丈夫です。

