RailsTutorial まとめ

RailsTutorialを進めていたときのメモ内容を
そのまま書いていきたいと思います。

# 共通で使うコマンド
- ファイルの削除 : rm [ファイル名]
- 空ディレクトリ削除 : rmdir [ディレクトリ名]
- 中身のあるディレクトリ削除 : rm -rf [ディレクトリ名]

# 第四章
- selfはオブジェクト自身を意味する
- ヘルパーメソッドを定義すると、すべてのviewで利用可能
- application_controllerにhelperをincludeすると全てのcontrollerで使える
- controllerにhelperをincludeするとそのcontrollerでのみ使える

（下２つはローカルで実験済み）

# 第五章
- アセットパイプライン
- ルーティングファイルでasを使うと名前付きルートを定義できる

# 第六章
- Active Recordのcallbackメソッドは、ある特定の時点で呼び出される
- before_saveはcallbackメソッドであり、オブジェクトが保存される前に処理を実行
- ユーザのセキュアなパスワード認証
- digestは暗号化用ハッシュ関数という言葉が語源
- ユーザ認証（PW入力 => 入力PWをハッシュ化 => DBにあるハッシュ化されたPWと比較）

# 第七章
- form_forヘルパーはActiveRecordのオブジェクトに対応するフォームを作成する
- Railsはhtmlにおけるnameの値を初期化したハッシュ（params経由）を生成する
- flash変数を使うことで一時的なメッセージを表示することができる

# 第八章
- ログイン済みかどうかでヘッダー部を切り替える
- cookiesはブラウザに保存されるデータ
- form_forメソッドに渡すリソースは、データ送信時にparamsに渡される
- フラッシュメッセージは、リクエストを送った後に消える
- renderは再レンダリングであり、リクエストを送っているのではない
- フラッシュメッセージはrenderしても消えない
- flash.nowは、レンダリング後のページでのみフラッシュメッセージを表示する
- sessionメソッドでidを暗号化しブラウザに保存できる
- 簡単にsessionメソッドでブラウザに保存したidを取得できる

# 第九章
- トークンはコンピュータが作成した秘匿されるべき情報
- 記憶トークンは、64種類の文字からなるランダムな22文字から構成される
- 記憶ダイジェストは、記憶トークンをハッシュ化したもの
- 永続セッションのためにユーザをデータベースに記録する
- self.email = …とemail = …は違う。前者はオブジェクトカラム, 後者はローカル変数
- update_attributeは、バリデーションを素通りして更新するメソッド
- cookiesにidを保存する際にはsessionの時とは違い、signedメソッドをチェーンする
- permanentをチェーンするとクッキーに期限を設けることができる
- ブラウザを閉じると、session[:id]がnilになる
- ブラウザを閉じると、cookies[:id]は消えない

# 第十章
- リンクにtarget=“_blank”を追加すると、新しいタブで開くようになる
- form_for(@user)は、new_record?メソッドでリクエストを判断する
- has_secure_passwordはオブジェクト生成時にパスワードの存在性チェックをする
- has_secure_passwordはオブジェクト編集時にパスワードの存在性チェックをしない
- 認証はサイトのユーザを識別すること
- 認可は、そのユーザが操作する事ができるかどうかを管理すること
- 認可機能を実装したいときは、コントローラ内でbefore_actionメソッドを使う
- フレンドリーフォワーディング
- seedsファイルにdevelopment環境のDBに生成するデータを定義することができる
- fixturesはtest環境のDBに生成するデータを定義する事ができる
- create!は、ユーザが無効なときにfalseを返すのではなく例外を返す
- モデルに論理値をとるadminカラムがある場合、admin?メソッドを使える
- リンクにmethod: :deleteとdata: { confirm: “...” }を設定すると確認＆削除機能作れる

# 第十一章
- ユーザ登録を完了するためにはアカウントの有効化をしなければいけない
- アカウントを有効化するには有効化トークンと有効化ダイジェストを使う
- 有効化トークンは、64種類の文字からなるランダムな22文字から構成される
- 有効化ダイジェストは、有効化トークンをハッシュ化したもの
- リンクをクリックするとGETリクエストを発行する
- before_createはbefore_callbackであり、オブジェクトを登録する前に処理をする
-名前付きルートで、第二引数にクエリパラメータをハッシュで渡すことができる
- メタプログラミングは受け取ったパラメータに応じて呼出すメソッドを切替える手法
- メタプログラミングはsendメソッドで実現できる
- params[:id]でactivation_tokenを種t区することができる理由がわからない

# 第十二章
- パスワード再設定するには、再設定用トークンと再設定用ダイジェストを使う
- 再設定用トークンは、64種類の文字からなるランダムな22文字から構成される
- 再設定用ダイジェストは、再設定用トークンをハッシュ化したもの
- update_columnsはバリデーションを通さず、複数カラムを更新できる

# 第十三章
- 複合キーインデックスでキーに関連付けられたオブジェクトを作成時間降順で取得可能
- user.microposts.createはユーザに紐づくmicropostをDBに保存することができる
- user.microposts.buildはユーザに紐づくmicropostをメモリに保存できる
- user.microposts.find_by(id: 1)はid=1のユーザに紐づくmicropostを取得できる
- default_scopeは、DBから複数オブジェクトを取得する時に得られる順序を指定する
- scopeは、「-> { puts “a" }」という形式で取得可能
- callメソッドは、定義したscopeを呼び出す
- request.refferrerは直前に処理したページに戻すメソッド
- redirect_backはrequest.refferrerと同様に直前に処理したページに戻すメソッド
- CarrierWaveは画像を簡単にアップロードできる
- CarrierWaveはアップロードした画像URLをDBに保存する
- アップロードした画像は、MiniMagicを使えば画像をリサイズ可能
- privateメソッドは継承先クラスからも呼び出すことができる
- form_tagは、ファイルをアップロードする際、html: { multipart: true }を必要とする
- form_forは、html: { multipart: true } オプションを使わなくてもアップロード可能 

# 第十四章
- followerは、フォロワー
- followedは、フォローしているユーザ
- followingは、follwer-followedの中間テーブル
- 多対多のリレーションは、中間テーブルを挟む
- 複合キーインデックス ex…「add index :relationships, [:follower_id, followed_id], unique: true」
- Railsは外部キーを「…_id」というパターンで認識している
- throughは中間テーブル名
- sourceは元の外部キー名
- 外部キー（follower_id）をシンボルで指定する際は、idを省略する（:follower）
- $(“#follow_form”).html(“foobar”)は「id=follow_form」の内側のコードをfoobarに置き換える処理
- 「User.first.following.map(&:id)」は「User.first.following_ids」と等しい
- SQLのサブセレクト