お気に入り機能

- many to many連携のための中間テーブルを生成。
many to many連携は、２者へのプライマリキーを持つテーブルを作成する。このテーブルを「中間テーブル」と呼ぶ。

* 1 to many(１対多)
has_many, belogs_to連携。
ひとりのユーザーが複数のコンテンツを持っておち、コンテンツが唯一のユーザーに関連している連携。
Indexを追加して高速化

user_idからもhitorigochi_idからも参照される可能性があるため、indexを貼る。
マイグレーション(migration)を実行

$ rake db:migrate
ルーティング(Routing)を定義

Favoriteのmany to
many連携のうち、片方はユーザーで、なおかつアクセスした人のアカウント(current_user)なので、プライマリキーをurlに含めて受け取る必要なし。
入れ子にしたresourceメソッドを使使用。
コントローラー(Controller)を作成する

今回はコントローラーを手動で作成してみる。
コントローラ(Controller)の作成

- before_filter :require_loginで、ログインしてリダイレクトさせる。

*
ログインしていなければcreateメソッドの本体が実行されない、という前提があることにより、current_userが必ず存在することになる。

- お気に入りモデルのインスタンスをbuildメソッドで生成し、保存を試みる。
Controllerの作成

-
find_by/find_by!メソッドはプライマリキーではないカラムで1件取得するメソッドで、!が付いていると該当レコードが無かった場合に例外が飛び。
* この例外はRecordNotFoundという例外で、最終的にはHTTPステータスコード404の「Not Found」になる。
Users#showにお気に入り一覧を表示する
モデル(Model)を記述

# User, Hitorigochi, Favoriteの関連付け
many to many連携の定義。

- Hitorigochi、Userも、Favoriteを複数持っている。
- Favoriteから見ると１つのUser、１つのHitorigochiに属している。
Validationを定義

- userとhitorigochiを持っている事は必要。
- お気にりの場合は同じ人が同じヒトリゴチを複数お気に入り登録することはできないので、scope付きのuniqueness制約を与える。
お気に入りに登録しているかどうか、を返すメソッド定義

- ture, falseを返すメソッドをモデルに実装。
* モデルはDBのレコード、カラムの状態を管理・表現するのが一番の仕事なので、まさにうってつけの仕事といれる。
* モデルの定義ファイル内でcurrent_userは使えない。モデルはDBのレコードに対応する概念。
　通信相手のブラウザがログイン中かどうか、というような通信に関わる情報とは関係を持たない。
Viewを調整する

- つぶやき一覧にお気に入りリンクを設置。
- お気に入りに登録ボタンを書く。

* 登録するとルーティングエラーになる。
　スペルミスもないようなのだが、原因追究に時間がかかりそうなので、先に進み、後で探る。