読者です 読者をやめる 読者になる 読者になる

コンパイラかく語りき

文系新卒プログラマーのメモ

文系プログラマーがRailsでロシア語アプリケーションをつくる⑱ ~お気に入り単語の表示~

どうも!chuckです。

前回は単語クイズを実装し、なおかつ単語をお気に入り登録できるようにしました!

今回はお気に入りした単語を、一覧表示させますヽ(=´▽`=)ノ

 

chuckwebtips.hatenablog.com

 

 

まずはファイルの作成から

表示させようにも、HTMLファイルがまずありません(;・∀・)

というわけで新規作成。お気に入りした単語って、ユーザー毎のものですし、ユーザーviewsに追加しました。

f:id:chuck0523:20150731080713p:plain

こんな感じです。下の方のrefer.html.erbです。

 

アクションの作成

次にお気に入り単語を表示するメソッドを作ります。

f:id:chuck0523:20150731080818p:plain

users_controller.rbに追記。

追加箇所はこちら。

f:id:chuck0523:20150731080852p:plain

 

えっと、お気に入りされた全ての単語の中で、(他のユーザーではなく)自分が登録したものだけを抽出します。ので、find( )の中にconditionとして:user_id => current_user.idをつけてあげます。

 

ビューの作成

f:id:chuck0523:20150731081358p:plain

先ほど作成したrefer.html.erbがこのようになりました。

 

ブラウザで確認してみます!

まず、ユーザーの個別ページにリンクを貼りました。

f:id:chuck0523:20150731081455p:plain

 

こちらのリンクをクリックすると、このとおり!

f:id:chuck0523:20150731081430p:plain

お気に入りされた単語が表示されています!

 

ただし、お気に入りされた単語って、他のデータへの参照キーしか持ってないんですよね…(;・∀・)

なので、上のように数値データのみになっています。単語IDを使って単語を取得する必要がありますね!

 

ここで苦戦する

多対多のリレーショナルの呼び出しに苦労しました。

 

調べたらこんな記事が。

b.pyar.bz

 

今回僕が作成したお気に入りテーブルは、記事の中では中間テーブルと呼ばれていました。中間テーブルはどうやらただのつなぎで、両端のテーブルに対してhas_manyのリレーショナルを定義する必要があるとか…

 

現状:has_many & has_one

理想:has_many & has_many

 

うわあああ・゚・(つД`)・゚・ ウェ―ン

モデルの段階からやり直しだ。。

 

やり直した。

f:id:chuck0523:20150731201851p:plain

ユーザーサイド。

has_many :aaa, :through => :bbb を利用。throughが中間テーブルの特徴のようです。

 

f:id:chuck0523:20150731201949p:plain

中間テーブルは両端にbelongs_toさせます。

 

f:id:chuck0523:20150731202113p:plain

単語サイド。

こちらもhas_many & through でリレーショナル定義。

 

f:id:chuck0523:20150731202014p:plain

さらに、マイグレーションファイルも修正します。

 

f:id:chuck0523:20150731202313p:plain

マイグレーション

 

しかし、単語のお気に入り追加でエラーが!

f:id:chuck0523:20150731203045p:plain

 

調べてみると、データのカラム名がおかしい…!

f:id:chuck0523:20150731203103p:plain

参照キーに設定したカラムにさらに「_id」がついている…!

 

f:id:chuck0523:20150731203306p:plain

マイグレーションファイルを修正。

 

f:id:chuck0523:20150731203507p:plain

よし!お気に入り追加できた!

 

あとはブラウザで確認するだけ!

ちなみにアクションとビューはこんな感じ。

f:id:chuck0523:20150731204014p:plain

referアクション

 

f:id:chuck0523:20150731204037p:plain

referビュー

 

 

ブラウザで見るとこう!

f:id:chuck0523:20150731204213p:plain

 きたー!!!ちゃんと出てます(´;ω;`)

 

ちょっと、すごくないですか???何がすごいって、アクションのシンプルさがすごい!

current_user.words

この1文で、サインインしているユーザーのお気に入り単語を全て取得できるなんて…!!!(´゚д゚`)

 

Railsやっぱりすごい!

 

 

あとがき

3回に渡って書いてきた「単語クイズとお気に入り機能」が、これにて完結しました。

次回はRailsチュートリアルに戻って、サインイン機能を強化したいと思います!というのも、現状だとURLを変えるだけで他のユーザーのページが見えてしまうので…ヽ(´Д`;)ノアゥア…

 

では!また!ヽ(=´▽`=)ノ