6/15 8:30 開始
*target="_blank"
リンクをクリックしたときに新しいタブ(またはウィンドウ)で開くようになる
*Railsが、新規ユーザー(POSTリクエスト)とユーザー編集用(PATCHリクエスト)をどのように区別するか
→Active Recordのnew_record?論理値メソッドで、ユーザーが新規か既存かを判断する。
新規ならtrueを返す。
$ rails console
>> User.new.new_record?
=> true
>> User.first.new_record?
=> false
form_with(@user)を使ってフォームを構成すると、@user.new_record?がtrueの場合はPOSTを使い、falseの場合はPATCHを使う。
10.1.1まで終了
6/15 9:00 終了
6/19 8:15 開始
10.1終了
6/19 8:50 終了
6/20 8:25 開始
Webアプリケーションの文脈では...
*認証(authentication):サイトのユーザーを識別すること
*認可(authorization):そのユーザーが実行可能な操作を管理すること
・beforeフィルター
転送の仕組みを実装したいときに、コントローラの中で使用する。
before_actionメソッドを使って何らかの処理が実行される直前に特定のメソッドを実行する。
(例)
class HogeController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
.
.
.
# beforeフィルタ
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to login_url, status: :see_other
end
end
end
デフォルトでは、beforeフィルターはコントローラ内のすべてのアクションに適用される。
:onlyオプション(ハッシュ)を渡すことで、:editと:updateアクションだけに適用されるように制限をかけることができる。
10.2.2まで終了
6/20 9:00終了
6/21 8:30 開始
*フレンドリーフォワーディング
<現状>
→保護されたページ(ユーザの編集画面など)にユーザーがアクセス
→ログイン画面に遷移
→ログインが成功すると自分のプロフィールページに遷移
<望ましい挙動>
→保護されたページ(ユーザの編集画面など)にユーザーがアクセス
→ログイン画面に遷移
→ログインが成功すると"ログイン前にアクセスしたページ"に遷移
リクエストされたページを保存
module SessionsHelper
.
.
.
# アクセスしようとしたURLを保存する
def store_location
session[:forwarding_url] = request.original_url if request.get?
end
end
request.get?
GETリクエストが送られたときだけ保存するようにしておくのがポイント
→POSTや PATCH、DELETEリクエストを期待しているURLに対してリダイレクト経由でGETリクエストが送信されてしまい、場合によってはエラーが発生する。
10.2まで終了
6/21 9:10 終了
6/22 8:30 開始
10.3.1 まで終了
6/22 9:00 終了
6/26 8:30 開始
・ページネーション
1つのページで一度に表示する情報を制限する。
(例)1つのページで一度に最大30人ずつユーザーを表示する。
Gemfileにwill_paginate
bootstrap-will_paginateを両方追加
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gem "rails", "7.0.4"
gem "bcrypt", "3.1.16"
gem "faker", "2.21.0"
gem "will_paginate", "3.3.1"
gem "bootstrap-will_paginate", "1.0.0"
.
.
.
*indexビューにwill_paginateメソッドを追加。
will_paginateメソッドは、usersビューのコードの中から@usersオブジェクトを自動的に見つけ出し、それから他のページにアクセスするためのページネーションリンクを作成する。
※@users変数には、paginateメソッドで得た結果が必要
→indexアクション内の、「User.all」を「User.paginate(page: params[:page])」に置き換える。
10.4.1まで終了
6/26 9:00終了
6/29 8:30開始
10章終了!!
6/29 9:00終了