読者です 読者をやめる 読者になる 読者になる

ぞえの技術めも

Ruby on Rails勉強中

【90日目】【1日20分のRailsチュートリアル】【第8章】“Remember me”チェックボックスを追加する

Ruby on Railsチュートリアル(第3版)

今日は「8.4.5 “Remember me” チェックボックス」から。

8.4.5 “Remember me” チェックボックス

今回の実装は、リスト8.2のログインフォームにチェックボックスを追加するところから始めます。

ログインフォームのビューにチェックボックスを追加。

app/views/sessions/new.html.erb

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

見た目を整えるためにCSS追加。

app/assets/stylesheets/custom.css.scss

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

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

サーバーを起動して

$ rails server -b $IP -p $PORT

チェックボックスが追加されていることを確認。

f:id:kt_zoe:20161226123715p:plain

ログインフォームの編集が終わったので、チェックボックスがオンのときにユーザーを記憶し、オフのときには記憶しないようにします。

params[:session][:remember_me]チェックボックスの状態を取得できるそう。

セッションのcreateアクションにてチェックボックスの状態によってユーザーを覚えておくか忘れるか処理を分ける。

app/controllers/sessions_controller.rb

    :
    if user && user.authenticate(params[:session][:password])
      log_in user
      params[:session][:remember_me] == '1' ? remember(user) : forget(user)
      redirect_to user
    :

チェックボックスがオフのときはforgetじゃなくて何もしなくてもいいんじゃないの…?
と思ったけど、前回のログイン時にチェックボックスをオンにしてたら永続的セッションに残ったままになるからわざわざ削除してるんだろうな。
なるほど。

今日の作業時間は【20分】

次は「8.4.6 Rememberのテスト」から。