🧥

認証済みマークの実装(enum)

2023/10/02に公開

この記事で分かること

  • 管理者側から公認された場合、ユーザネームに認証済みマークを付与する

前提条件

  • user/show,editページが実装済み
  • enum_helpが実装済み
  • Font fontawesomeが実装済み

完成イメージ

ユーザー側

image_company

image_admin

image_name

管理者側

image_admin_edit1

image_admin_edit2

テーブル

table_users

実装手順

  1. enumの実装
  2. admin側のユーザ編集の作成
  3. public側のユーザ詳細に反映

実装方法

実装手順に沿って紹介します。

1. enumの実装

Usersモデルに記述

Usersモデルにenumの内容を記述する。

user.rb
  #認証マークの付与
  enum certification_status:  { "unachieved": 0, "achieved": 1, "admin": 2 }
補足

モデル作成のとき、デフォルト値を0:認証未達になるように調整すること

config/locales/ja.yml
  ja:
    enums:
      user:
       position_status:
          normal: "一般"
          company: "企業"
+      certification_status:
+         unachieved: "未達"
+         achieved: "認証"
+         admin: "管理者"
       range:
          User: "ユーザー名"
          Item: "商品名/会社名"
      product:
       active_status:
          sale: "販売中"
          limited_time_sale: "期間限定販売"
          end_of_sale: "販売終了"

2. admin側のユーザ編集の作成

admin/users/edit.html.erb
 <div class= "container py-5 px-sm-0">
  <div class= "row justify-content-center">
    <%= form_with model: @user,url: admin_user_path(@user), local: true do |f| %>
      <div class = "form-group col-12">
        <label for="inputName">ユーザー名</label><br>
        <%= f.text_field :name, autofocus: true, id:"inputName form-control" ,class: "inputName form-control" %>
      </div>
      <div class = "form-group col-12">
        <label for="inputImage">プロフィール画像</label><br>
        <%= f.file_field :profile_image, placeholder: "プロフィール画像", accept: "image/*" %>
      </div>
      <div class = "form-group col-12">
        <label for="inputIntroduction">自己紹介</label><br>
        <%= f.text_area :introduction, autofocus: true, id:"inputintroduction",class: "inputIntroduction form-control"  %>
      </div>
      <div class = "form-group col-12">
        <label for="inputAddress">ホームページ</label><br>
        <%= f.text_field :address, autofocus: true, id:"inputAddress form-control" ,class: "inputAddress form-control" %>
      </div>
      <div class="form-group text-center col-12">
        <span class= "mr-5">会員ステータス</span>
          <%= f.radio_button :is_deleted, :false %>
          <%= f.label :is_active_false, "有効" %>
          <%= f.radio_button :is_deleted, :true %>
          <%= f.label :is_active_true, "退会" %>
      </div>
+     <div class = "form-group col-12">
+       <label for="inputAddress">認証ステータス</label><br>
+       <%= f.select( :certification_status, User.certification_statuses_i18n.invert, {}, class: 'form-control text-center')%>
+     </div>
      <div class = "form-group row justify-content-center">
        <%= f.submit "更新する",class: "btn btn-success" %>
      </div>
    <% end %>
  </div>
 </div>
補足

<%= f.select( :enum名, モデル名.enum名複数形_i18n.invert)%>
一覧表示できる(enum_helpのメソッド)

3. public側のユーザ詳細に反映

部分テンプレートで作成

_user_certification.html.erb
<% if user.certification_status == "unachieved" %>
 <div></div>
<% elsif user.certification_status == "achieved" %>
 <i class="fa-regular fa-circle-check text-success"></i>
<% else %>
 <i class="fa-regular fa-circle-check text-danger"></i>
  <% end %>

if文で場合分けし表示を確認したら完成です。

感想

enumの復習になりました。enumはデフォルトで0に設定されると思っていたのですが、自分から設定しないと0に設定されませんでした。またenumについて調べようと思います。

この記事をかいた人

https://twitter.com/tya_dwc
23/6/1にDWCに入学し、主にRailsの学習に取り組みました。卒業が近づきこれから何で学習をするか悩んだときに、技術ブログをしようと考えました。初心者ですがよろしくお願いします。

Discussion