どうも!chuckです。
前回は単語クイズを実装し、なおかつ単語をお気に入り登録できるようにしました!
今回はお気に入りした単語を、一覧表示させますヽ(=´▽`=)ノ
まずはファイルの作成から
表示させようにも、HTMLファイルがまずありません(;・∀・)
というわけで新規作成。お気に入りした単語って、ユーザー毎のものですし、ユーザーviewsに追加しました。
こんな感じです。下の方のrefer.html.erbです。
アクションの作成
次にお気に入り単語を表示するメソッドを作ります。
users_controller.rbに追記。
追加箇所はこちら。
えっと、お気に入りされた全ての単語の中で、(他のユーザーではなく)自分が登録したものだけを抽出します。ので、find( )の中にconditionとして:user_id => current_user.idをつけてあげます。
ビューの作成
先ほど作成したrefer.html.erbがこのようになりました。
ブラウザで確認してみます!
まず、ユーザーの個別ページにリンクを貼りました。
こちらのリンクをクリックすると、このとおり!
お気に入りされた単語が表示されています!
ただし、お気に入りされた単語って、他のデータへの参照キーしか持ってないんですよね…(;・∀・)
なので、上のように数値データのみになっています。単語IDを使って単語を取得する必要がありますね!
ここで苦戦する
多対多のリレーショナルの呼び出しに苦労しました。
調べたらこんな記事が。
今回僕が作成したお気に入りテーブルは、記事の中では中間テーブルと呼ばれていました。中間テーブルはどうやらただのつなぎで、両端のテーブルに対してhas_manyのリレーショナルを定義する必要があるとか…
現状:has_many & has_one
↓
理想:has_many & has_many
うわあああ・゚・(つД`)・゚・ ウェ―ン
モデルの段階からやり直しだ。。
やり直した。
ユーザーサイド。
has_many :aaa, :through => :bbb を利用。throughが中間テーブルの特徴のようです。
中間テーブルは両端にbelongs_toさせます。
単語サイド。
こちらもhas_many & through でリレーショナル定義。
さらに、マイグレーションファイルも修正します。
再マイグレーション!
しかし、単語のお気に入り追加でエラーが!
調べてみると、データのカラム名がおかしい…!
参照キーに設定したカラムにさらに「_id」がついている…!
マイグレーションファイルを修正。
よし!お気に入り追加できた!
あとはブラウザで確認するだけ!
ちなみにアクションとビューはこんな感じ。
referアクション
referビュー
ブラウザで見るとこう!
きたー!!!ちゃんと出てます(´;ω;`)
ちょっと、すごくないですか???何がすごいって、アクションのシンプルさがすごい!
current_user.words
この1文で、サインインしているユーザーのお気に入り単語を全て取得できるなんて…!!!(´゚д゚`)
Railsやっぱりすごい!
あとがき
3回に渡って書いてきた「単語クイズとお気に入り機能」が、これにて完結しました。
次回はRailsチュートリアルに戻って、サインイン機能を強化したいと思います!というのも、現状だとURLを変えるだけで他のユーザーのページが見えてしまうので…ヽ(´Д`;)ノアゥア…
では!また!ヽ(=´▽`=)ノ