らくだ🐫にもできるRailsチュートリアル|9.2

[Remember me] チェックボックス

[remember me] チェックボックスでログインの保持を選択できるようにする
見本はRoRT本文

チェックボックスを追加する

チェックボックスはヘルパーメソッドを使って作成できる
ただし、下記のようにラベルの内側に配置する必要がある!

<%= f.label :remember_me, class: "checkbox inline" do %>
  <%= f.check_box :remember_me %>
  <span>Remember me on this computer</span>
<% end %>

これを反映したログインフォームのコード

・
・
・
      <%= f.label :remember_me, class: "checkbox inline" do %>
        <%= f.check_box :remember_me %>
        <span><%= t('.remember_me_checkbox') %></span>
      <% end %>

      <%= f.submit t('.login'), class: "btn btn-primary" %>
    <% end %>

    <p><%= t('.new_user?') %><%= link_to t('.signup'), signup_path %></p>
  </div>
</div>

スタイルも追加

・
・
・
/* forms */
・
・
・
.checkbox {
  margin-top: -10px;
  margin-bottom: 10px;
  span {
    margin-left: 20px;
    font-weight: normal;
  }
}

#session_remember_me {
  width: auto;
  margin-left: 0;
}

実装はわずか1行

チェックボックスがオンのときにユーザーを記憶し、オフのときには記憶しないようにします。信じられないかもしれませんが、必要な準備はすべて終わっているので、実装はわずか1行で終わります。

→ログインフォームから送信されたparamsハッシュにはすでにチェックボックスの値が含まれている

#以下の値はチェックボックスがオンの時に'1'になり、オフの時に'0'
params[:session][:remember_me]

params[:session][:remember_me]の値に基づいてユーザーを記憶するか忘れるかを判断する

#params[:session][:remember_me]が1(オン)の時
if params[:session][:remember_me] == '1'
  #userを記憶
  remember(user)
#そうでなければ
else
  #userを忘れる
  forget(user)
end

#三項演算子を使うことで上記のコードをさらに短く↓
params[:session][:remember_me] == '1' ? remember(user) : forget(user)

コントローラーに反映させると↓こう

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      #session[:user_id] = user と言う事
      log_in user
      #params[:session][:remember_me]が1の時userを記憶 そうでなければuserを忘れる
      params[:session][:remember_me] == '1' ? remember(user) : forget(user)
      #user_url(user) という名前付きルートになる
      redirect_to user
    else
      flash.now[:danger] = t('.login_error')
      render 'new'
    end
  end
・
・
・

三項演算子とは何ぞ

if boolean?
  何かをする
else
  別のことをする
end

↑これを↓こうする

論理値? ? 何かをする : 別のことをする

3つの部分から構成される演算子ということ
三項演算子についてのRoRT本文のコラム

演習

  1. ブラウザでcookies情報を調べ、[remember me] をチェックしたときに意図した結果になっているかどうかを確認してみましょう。
  2. コンソールを開き、三項演算子を使った実例を考えてみてください

1.〇(チェックを入れた時はuser_idとremember_tokenがcookieに保存されている)

>> def come_home(onaka)
>>   onaka == "hungry" ? "ごはんにする" : "おふろにする"
>> end
=> :come_home
>> come_home("full")
=> "おふろにする"
>> come_home("hungry")
=> "ごはんにする"

まとめとか感想

ちょっと短いけど本文に倣ってこれにて。

らくだ🐫にもできるRailsチュートリアルとは

「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。
自分用に記録していますが、お役に立つことがあれば幸いです。

調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。そんな所は教えて頂けますと幸いなのですが、このブログにはコメント機能がありません💧お手数おかけしますがTwitterなどでご連絡いただければ幸いです