Railsチュートリアル 第10章 メモ書き
○ユーザーの更新・表示・削除
・新規ユーザーとユーザー編集の区別:
POSTリクエストとPATCHリクエストはActive Recordのnew_record論理値
メソッドを使っている。
@user.new_record? → trueではPOST、falseではPATCH
・ユーザー更新失敗時:
paramsハッシュ(user_params)をupdateメソッドに引き渡し、
If文で更新に成功すれば、プロフィールに。
失敗すれば編集ページにrenderする。
・受け入れテスト(Acceptance Tests):
アプリケーションの実装前に書かれた統合テストのこと。
・認証:サイトのユーザーを識別。
認可:ユーザーが実行可能な操作を管理すること。
誰でも自分以外のユーザー情報を編集や更新できるとまずい。
・ユーザーにログインを要求→beforeフィルターを使う:
before_actionメソッド 何らかの処理が実行される直前に特定のメソッドを
実行する仕組み。
例)before_action :logged_in_user, only: [:edit, :update]
edit、updateアクションを実行する前にlogged_in_userアクションを実行する。
デフォルトではコントローラ内の全てのアクションに適用されるが、
onlyオプションでアクションを制限している。
・編集・更新する場合も、正しいユーザーか判断を行うcorrect_userメソッドを
before_actionでedit:updateが実行される前に行うことでセキュリティを保証
・フレンドリーフォワーディング:
ログイン成功時に元々行きたかったページに転送させる機能
リクエスト時点のページをセッション中に保存、URLが保存されていれば
その場所に、なければデフォルトのURLにリダイレクトさせる。
但し、URLの保存はGETリクエストが送られた時だけに限定することで、
ログインしていないユーザーがフォームを使って送信した場合に転送先のURL
を保存させないようにできる(エラーの発生を未然に防ぐ)。
session[:forwarding_url] = request.original_url if request.get?
redirect_to(session[:forwarding_url] || default)
session.delete(:forwarding_url)
※転送用URLを削除しておかなければ次回ログイン時に保護されたページに飛ばされてしまう。
・ユーザーのサンプル:
Faker gem:実際にいそうなユーザー名を作るgem。
Railsでデータベース上にサンプルユーザーを生成する場合は、
db/seeds.rbというファイルを標準として使う。
・ページネーション:
一つのページに大量のユーザーが表示される状態を解決する方法。
1つのページに表示するユーザー数を制限する。
最もシンプルなものはwill_pagineteで、今回はGemfileに
will_paginate gem とbootstrap-will_paginateの両方を含めることで構築可。
ページネーションの動作には、indexビューに<%= will_paginate %>を書く。
(:pageがキーでデフォルトで30のデータを取り出す)
・管理ユーザー:
データベースにboolean型のadmin属性をUserモデルに追加する。
1であれば管理者ユーザーとして、他ユーザーのデータ編集・削除が可能に。
+Strong Parameterでセキュリティ対策
params.require(:user).permit(:name, :email, :password,:password_confirmation)
→admin属性は含めず、任意のユーザーが自身に管理者権限の付与を防ぐ
・render @usersを実行すると、自動的に_user.html.erbパーシャルを参照し、各ユーザーをコレクションとして表示する