Saka_engineerの日記

A fledgling engineer write a diary for output.

ユーザーの管理機能の実装フローチャート

ユーザーの管理機能の実装フローチャート

 

ユーザーの管理機能を実装するには、

⑴まず名前のカラムが必要。

ついでに名前のカラムが空だと登録できないようにする。

 

⑵application_controller.rbにbeforeアクションを設定。

authnticate_user!とconfigure_permitted_parametersを設定。

これらで、ログインしていないユーザーはログイン画面に遷移、

必要なパラメーターは送ってもらえるように設定。

 

⑶次にルーティングの設定。

ユーザーの管理機能に関するルーティングはeditとupdate

resourcesにeditとupdateを記述。

 

⑷コントローラーにアクションを定義。

定義するのはeditとupdate

 

editは何も書かない。

 

Updateは

current_userメソッドを使用して、ログイン中のユーザーのid(params)を取得できるようにする。

 

また、プライベートメソッド内にparamsの定義をする。

 

⑸link_toを使用し、編集画面への遷移とログアウト機能の搭載をする。

この時、rails routesを使って、prefixを確認してpathを取得。

⑹バリテーションを設定

Userモデルに、

validates :name, presence: true

と記述することで、

登録する時に、nameの部分は空欄にできませんよ。という制約をつける。

 

 

 

 

 

 

⑴必要なカラムを追加する

t.string :name, null: false

これはuserのnameのカラムで、null: falseと記述することで、migrateした時に、

nameカラムに空の値を許可しないNOT NULL制約ができる。

 

NOT NULL制約は、テーブルの属性値にNULL(空の値)が入らないように制限する制約です。

 

⑵application_controller.rbにて

コントローラーの先頭に、before_action :authenticate_user!

before_action:authenticate_user!を設定することで、ログインしていないユーザーをログインページの画面に促すことができます。

before_action :configure_permitted_parameters, if: :devise_controller?

Beforeアクションなので、全てのアクションの前に、実行できる。

呼び出すのは、configure_permitted_parametersメソッド。

deviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できます。

 

def configure_permitted_parameters  # メソッド名は慣習

  devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])

end

 

処理名こちら

:sign_in

ログインの時

:sign_up

新規登録の時

:account_update

アカウント情報の更新の時

 

許可するキーは、許可したいカラム名を記述

名前ならnameと記述。

 

application_controller.rbに記述し

プライベートメソッドの中で使用

 

 

⑶ユーザー編集に必要なルーティングは、editとupdateなので、

routes.rbに、

 resources :users, only: [:edit, :update]と追記

 

Usersコントローラーを生成して、

Usersコントローラー内に、

edit,updateアクションを設定する。

Updateアクションには、

ストロングパラメーターを使用し、user_paramsを定義。

「name」と「email」の編集を許可

 

ログイン中のユーザーが持つidを取得するには、current_userメソッドを使用します。

 current_userメソッド

Gemのdeviseを導入しているため、使用できるメソッドです。

 

def update

    current_user.update(user_params)

  end

 

 

  private

  def user_params

    params.require(:user).permit(:name, :email)

  end

 

このように定義して、

Updateした時に、user_paramsを受け取れるように設定。

ログインしているユーザーの情報を更新します

 

 

def update

    if current_user.update(user_params)

      redirect_to root_path

    else

      render :edit

    end

  end

またこのように分岐を書いて、

アップデートできた場合とそうで無い場合を分け、

できた場合にはredirect.to

できなかった時には、render :editを設定。

 

 

⑷ページ移動のためのビューファイルの編集

<%= link_to current_user.name, edit_user_path(current_user) %>

 

current_user.nameはログインしているユーザーのこと、

Prefixは、edit_user_pathなので、

上記のように記述。

 

 

⑸ログアウトを実装

<%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: 'btn'%>

 

link_toでログアウトボタン作成。

prefixがdestroy_user_session_path

HTTPメソッドのdeleteを指定すれば、ログアウト機能が使える。

 

 

⑹バリテーションを設定

Userモデルに、validates :name, presence: trueを追記します。

「name」カラムに、presence: trueを設けることで、空の場合はDBに保存しないというバリデーションを設定しています。

つまり、ユーザー登録時に「name」を空欄にして登録しようとすると、エラーが発生します。