【rails】「いいね」した記事の一覧を表示する

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

「いいね」した記事の一覧を表示する

前回までで、「いいね」の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でもいいけど、「自分の書いた記事」という意味ですでに使用しているので使えない


indexアクションを定義する

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で「いいね」した記事を取得できる


viewを作る

お気に入り記事の一覧を作る

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