勉強履歴(と雑記)

プログラミング初心者のメモ書きです

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パーシャルを参照し、各ユーザーをコレクションとして表示する