ユーザーを特定する
初めに
Progateを学習して躓いたところを中心にアウトプットし、備忘録としても活用していきます。
ログインするユーザーを特定していく。
find_byメソッドを利用していく。
今回はpasswordとemailの2つからユーザーを特定していく
ユーザーテーブルからフォームで入力された値と一致するユーザーを見つけ出し、@userに代入する
users_controller
def login @user = User.find_by(email: params[:email], password: params[:password]) end
if文を使って存在するユーザーなのか、存在しないユーザーなのか判別する。
users_controller
def login @user = User.find_by(email: params[:email], password: params[:password]) if @user flash[:notice] = "ログインしました" redirect_to("/posts/index") else render("users/login_form") end
if @user ではemailとpasswordが一致するユーザーがいるのならばというコード。
一致するユーザーがいた場合、flash[:notice] = "ログインしました"が表示される。
そして投稿一覧ページに遷移する。
もし一致するユーザーがいなければ、ログインページに戻る。
ユーザーがいなかった場合、エラーメッセージを表示させる
users_controller
def login @user = User.find_by(email: params[:email], password: params[:password]) if @user flash[:notice] = "ログインしました" redirect_to("/posts/index") else @error_message = "メールアドレスまたはパスワードが違います" render("users/login_form") end
- バリデーションによって表示させるエラーメッセージではないので、@error_message = "メールアドレスまたはパスワードが違います"のように 自作でエラーメッセージを作る。
login_form.html.erb
<div class="form-body"> <% if @error_message %> <div class="form-error"> <%= @error_message %> </div> <% end %> <%= form_tag("/login") do %> <p>メールアドレス</p> <input name="email" value="<%= @email %>"> <p>パスワード</p> <input type="password" name="password" value="<%= @password %>"> <input type="submit" value="ログイン"> <% end %> </div>
- reder先のlogin_form.htmlに@error_messageを貼り付け、メールアドレスとパスワードが一致しない場合はエラーメッセージが表示できるようにす る。
結語
find_byメソッドを利用して登録したユーザーを見つけ出す。
if 文を利用して登録済みユーザーが未登録ユーザーなのかを判別する。
flashメッセージを利用してログインができたことを表示させる。
バリデーションではないエラーメッセージの場合は@error_messageのような自らエラー表示用のインスタン変数を作り出し、メッセージを記述し、 表示させたいビューに貼り付ける。