ユーザーの管理機能の実装フローチャート
ユーザーの管理機能の実装フローチャート
ユーザーの管理機能を実装するには、
⑴まず名前のカラムが必要。
ついでに名前のカラムが空だと登録できないようにする。
⑵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」を空欄にして登録しようとすると、エラーが発生します。