初めに
以前、いいね機能&非同期通信を行いました。
今回いいねの一覧を作成したいと思います。
前回の記事はこちらから。
調べてみると色々とやり方があるみたいでした。
今回は、ルーティングでのcollectionやmember、plunkについても学べました!
ルーティング作成
resources :users, only: [:show,:index,:edit,:update] do
member do
get :favorites
end
end
どういうルーティングにしたいかというと、
ユーザーのマイページから、そのユーザーのお気に入りしてる記事に飛びたいので、
users/1/favorites というルーティングにしたい。
となるとmember do
を使用します。
member do / collection doについて
member doって何なのか??
member doを使うと、ユーザーidが含まれてるurlを使えるようになります。 member は特定のデータに対するアクションに利用するそうです。ルーティングはこうなります。
users/:id/favorites
collection doって何??
今回、使用していませんが、よく目にするのがcollection do
です。
仮にここをcollection doで記述すると、
ルーティングは users/favorites
になります。
```member```と```collection```の違いは、idがつくか、つかないか です。
collectionは集合なのでidはなし、memberは個別なのでidありです!!コントローラー
```perl:users_controller.rbdef favorites
@user = User.find(params[:id])
favorites= Favorite.where(user_id: @user.id).pluck(:post_id)
@favorite_posts = Post.find(favorites)
end
```favorites= Favorite.where(user_id: @user.id).pluck(:post_id)```
さて、この記述です。
ユーザーidが、このユーザーの、いいねのレコードを全て取得します。
そして、そのpost_idも一緒に持ってくる
それをfavoritesに代入。
結果、favoritesの中身には、何が入ってるかというと、あるユーザーがいいねした記事のidです。
<h5>whereの復習</h5>
与えられた条件にマッチするレコードを全て取得します。
<h4>plunkって何???</h4>
Product.pluck(:name)という記述があった場合、
productモデルのnameカラムの一覧を持ってこれる。
1つのモデルで使用されているテーブルからカラム (1つでも複数でも可) を取得することができるそう。
<h2>View</h2>
もの凄く簡単、シンプルなviewですので、参考までに。
```perl:users/show.html.erb
<p><%=link_to"お気に入り記事",favorites_user_path(@user) %></p>
いいね一覧
<% @favorite_posts.each do |post|%>
<%=post.title %>
<% end %>
これで、いいねした記事の一覧ページが作成出来ました。
大変、参考にさせていただいた記事
モデルに定義するやり方だったり、やり方は色々あるみたいで、
中々しっくりくる記事に出会えませんでしたが、
上記の記事でシンプルかつ簡単に実装出来ました。