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
endvar = boolean? ? foo : bar