Rails Tutorial 9章 remember_meチェックボックス

よくあるやつ。「次回以降自動でログインする」みたいな。


ログインフォームに追記

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 %>
.

bootstrapが、checkbox, inlineの二つを認識して、テキストRemember ~~ と同じ行に配置してくれる

もうちょっとスタイルを整える

app/assets/stylesheets/custom.scss
.
.
/* forms */
.
.checkbox {
  margin-top: -10px;
  margin-bottom: 10px;
  span {
    margin-left: 20px;
    font-weight: normal;
  }
}

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

これでログインフォームの編集終わり。


次に、チェックの有無でユーザーの記憶をするかどうかを書く。

実は、ログインフォームから送信されたparamsハッシュには、すでにチェックボックスの値が含まれている。(チェックボックスがオンの時は「1」になり、オフの時は「0」になる。
なので、このparamsハッシュの値を調べて判定すれば良い。

if params[:session][:remember_me] == '1'
  remember(user)
else
  forget(user)
end


この式、「三項演算子」というのを使えば一行で書けるっぽい。

params[:session][:remember_me] == '1' ? remember(user) : forget(user)

非常にコンパクト


これを、createアクションに追記

app/controllers/sessions_controller.rb
.
def create
.
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
.


三項演算子
「論理値? ? 何かをする : 別のことをする
if boolean?
var = foo
else
var = bar
end

var = boolean? ? foo : bar