BETA

【Rails】ユーザIDの設定 2

投稿日:2019-12-18
最終更新:2019-12-18

前記事の続きです。
https://sunnydayservice.qrunch.io/entries/fZVs8Ov0fdQUb7jQ

今回はユーザが任意のIDを登録した場合は、そのIDがユーザIDとなり、ユーザによるIDの登録が無かった場合は、自動でユーザIDを設定するようにします。

参考

https://qiita.com/at-946/items/f495442a8a9bfdae5a6b
https://qiita.com/at-946/items/03a5d03c8865ac4cbd2c

GitHub
https://github.com/equivalent/public_uid

前提

前回の記事のようにGemのインストールが終わっている
モデルにgenerate_public_uid が記述されている

gem 'public_uid'の挙動の考察

ユーザ作成(編集)画面に、新しくユーザID入力フィールドを設定して、ユーザIDフィールドに入力があれば、IDの検証を行って保存、ユーザIDフィールドに入力がなければ、自動でユーザIDを決める。

gem 'public_uid'の実際の挙動

form groupで設定したpublic_uid が保存するストロングパラメータにあれば、ストロングパラメータにが優先される。何もなければgem 'public_uid'が実行される。

どういうことかというと、
form groupに

~~~~  
      <div class="form-group">  
        <%= f.label :id, 'ID' %>  
        <%= f.text_field :public_uid, class: 'form-control' %>  
      </div>  
~~~~  

と設定して、レコードを保存する場合、public_uid をストロングパラメータに含めることでレコードを保存できるようになるわけです。

#例  
params.require(:user).permit(:public_uid)  

このストロングパラメータに:public_uid が記入されていると、モデルに記述されているgenerate_public_uid が動かず??ランダムなIDの設定が行われません。
逆に、

#例  
params.require(:user).permit(:name)  

のように、ストロングパラメータに:public_uid 設定されていなければ、generate_public_uidが作動して、ランダムなIDの設定が行われます。

ここまでのまとめ

generate_public_uid を作動させるためには(ランダムなIDの設定がしたいなら)、、
ストロングパラメータに:public_uid を記入しない。

generate_public_uid を作動させないためには(自由なIDの設定がしたいなら)、、
ストロングパラメータに:public_uid を記入する。

実装

IDを各自設定する。IDの記入がない場合は、ランダムなIDを発行する ようにコードを記述します。

変えるのはストロングパラメータのみです。
今回はUsersテーブルにレコードを保存します。
また、ストロングパラメータ自体もdef user_params メソッドで設定しています。

users_controller.rb

  def user_params  
    if params[:user][:public_uid].empty?  
      params.require(:user).permit(:name,  :email, :password, :password_confirmation, :image)  
    else   
      params.require(:user).permit(:name, :public_uid, :email, :password, :password_confirmation, :image)  
    end  
  end  

params[:user][:public_uid].empty? に入力が無ければストロングパラメータに:public_uid を与えません。
そして、
params[:user][:public_uid].empty? に入力があればストロングパラメータに:public_uid を与えます。

これで完成です。

まとめ

かなり勉強になるないようでした。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

初学者の成長が垣間見れます

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう