※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
「いいね」した記事の一覧を表示する
前回までで、「いいね」のcreate、destroy、数のカウントができた
今回は、「いいね」した記事の一覧を表示していく
config/routes.rbを開く
resources :favorites, only: [:index]
app/models/user.rbを開く
has_many :articles, dependent: :destroy
has_many :likes, dependent: :destroy
# ↓この1行を追加
has_many :favorite_articles, through: :likes, source: :article
has_one :profile, dependent: :destroy
これで自分が「いいね」した記事だけを取得することができる
3つのテーブルについて
users
テーブル、likes
テーブル、articles
テーブルの3つがある
users
テーブルからlikes
は取得できるarticles
テーブルからlikes
は取得できるusers
テーブルから、likesしたarticlesは取得できない
どうしたら「いいね」した記事を取得できる?
through
を使うと、中間のlikesテーブルを通して記事を取得できる
sourceとは
favorite_articles
というデータベース、モデルは存在しない
source: :article
で、article
を指しているという意味になる
has_many :articles
でもいいけど、「自分の書いた記事」という意味ですでに使用しているので使えない
app/controllers/favorites_controller.rbを作成する
class FavoritesController < ApplicationController
before_action :authenticate_user!
def index
@articles = current_user.favorite_articles
end
end
user.rbでhas_many :favorite_articles
を定義した
→ current_user.favorite_articles
で「いいね」した記事を取得できる
app/views/favorites/index.html.hamlを作る
.container
%h2
お気に入りの記事
- @articles.each do |article|
= render 'commons/article', article: article
「いいね」したお気に入り記事が一覧表示されるようになる
app/views/layouts/application.html.hamlを開く
ドロップボタンのプロフィール下にリンクを貼る
= link_to 'プロフィール', profile_path
= link_to 'お気に入りの記事', favorites_path
#DAY25