LoginSignup
0
0

【学習】Ruby on Rails チュートリアル 第7版 - 第10章 ユーザーの更新・表示・削除

Last updated at Posted at 2023-06-14

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終了

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0