Ruby on Rails 8章序盤 ログイン機構をやりました。
〇ログインページ
rails generate controller Sessions new
create や destroyのviewはいらないのでnewだけあればいい。
〇ActiveRecordのモデル≠ビューなページの作り方
ユーザ登録のように、表示する、登録するデータがモデルと1:1になっているものは先にやった。
ここでは、ビュー(表示/登録するデータを扱う)とモデルが紐づけされないケースを扱うことになる。
<%= form_for(:session, url: login_path) do |f| %>
<% end %>
〇復習
helperにメソッドを退避
def isValid?(email, password)
user = User.find_by( email: email.downcase )
return user && user.authenticate( password )
end
include SessionsHelper
をモデルへ。
後でuserモデルを使いたいなら,
return user if user && user.authenticate( password )
にしてもいいかも。後方if便利。
〇エラーメッセージにフラッシュを使う
flash[:danger] = ‘error msg’
※flashを表示するのはapplication.html.erbの中。
flashで書き出すと、「次のリクエストのレスポンス」までは有効なので、
flash後にrender→ flashと同一リクエスト内で表示。
アンカータグを踏んで次のリクエスト→ まだ表示される。
更に次のアンカータグを踏んで2つ次のリクエスト→ ここできえる。
だから、flash[:success]で表示した後にredirectしたユーザ登録には違和感がない。
(=redirectが「次のリクエスト」になるから)
flash.now[:success]という1つ寿命の短いフラッシュもある。
〇session
session[:key] = value
でセッションに値を保持できる。
裏では暗号化されている。また、sessionの場合はブラウザの閉じるで
クッキーの有効期限が切れるな設定になっている。