【Ruby on Rails】 에러 메시지의 개별 표시

16116 단어 루비Railserror

목표





개발 환경



루비 2.5.7
Rails 5.2.4.3
OS: macOS Catalina

전제



※◯◯◯를 선택하면 설명 등이 나오므로,
잘 모르는 경우의 참고로 해 주시면 좋겠습니다.
  • devise로 로그인 환경 구축

  • ※기술이 적으면, 유효한 수단이라고 생각합니다만,
    많아지면 설명이 상당히 늘어나 버리므로,
    참고까지 봐 주셨으면 합니다.

    view 편집



    초기 상태라면 아래와 같이 기재되어 있습니다.

    app/views/users/registrations/new.html.erb
    <h2>Sign up</h2>
    
    <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
      <%= render "users/shared/error_messages", resource: resource %>
    
      <div class="field">
        <%= f.label :name %><br />
        <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
      </div>
    
      <div class="field">
        <%= f.label :email %><br />
        <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
      </div>
    
      <div class="field">
        <%= f.label :password %>
        <% if @minimum_password_length %>
        <em>(<%= @minimum_password_length %> characters minimum)</em>
        <% end %><br />
        <%= f.password_field :password, autocomplete: "new-password" %>
      </div>
    
      <div class="field">
        <%= f.label :password_confirmation %><br />
        <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
      </div>
    
      <div class="actions">
        <%= f.submit "Sign up" %>
      </div>
    <% end %>
    
    <%= render "users/shared/links" %>
    
    

    위에 편집을 추가합니다.

    app/views/users/registrations/new.html.erb
    <h2>Sign up</h2>
    
    <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
      <% if @user.errors.any? %>
      <% end %>
    
      <div class="field">
        <%= f.label :name %><br />
        <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
        <% if @user.errors.include?(:name) %>
          <p style="color: red;"><%= @user.errors.full_messages_for(:name).first %>
        <% end %>
      </div>
    
      <div class="field">
        <%= f.label :email %><br />
        <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
        <% if @user.errors.include?(:email) %>
          <p style="color: red;"><%= @user.errors.full_messages_for(:email).first %>
        <% end %>
      </div>
    
      <div class="field">
        <%= f.label :password %>
        <% if @minimum_password_length %>
        <em>(<%= @minimum_password_length %> characters minimum)</em>
        <% end %><br />
        <%= f.password_field :password, autocomplete: "new-password" %>
        <% if @user.errors.include?(:password) %>
          <p style="color: red;"><%= @user.errors.full_messages_for(:password).first %>
        <% end %>
      </div>
    
      <div class="field">
        <%= f.label :password_confirmation %><br />
        <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
        <% if @user.errors.include?(:password_confirmation) %>
          <p style="color: red;"><%= @user.errors.full_messages_for(:password_confirmation).first %>
        <% end %>
      </div>
    
      <div class="actions">
        <%= f.submit "Sign up" %>
      </div>
    <% end %>
    
    <%= render "users/shared/links" %>
    
    

    보충


    ①下記記述を削除し、if文を追加。@userのエラーを確認します。
    <%= form_for%>
    <%= render "users/shared/error_messages", resource: resource %><%= form_for%>
    <% if @user.errors.any? %>
    <% end %>
    
    ②各field下に下記のカラム名を編集後追加。
    <% if @user.errors.include?(:name) %>
      <p style="color: red;"><%= @user.errors.full_messages_for(:name).first %>
    <% end %>
    

    유효성 검사를 추가하고 오류를 더 많이 확인하려면,
    다음과 같이 추가하면 괜찮습니다.
    밸리데이션의 종류는 많이 있으므로 조사해 보세요.
    덧붙여서 아래의 밸리데이션은 공백이 아닌 것을 확인하고 있습니다.

    app/models/user.rb
    validates :name, presence: true
    

    좋은 웹페이지 즐겨찾기