【Rails】ユーザー1人の全ての投稿に紐づく「イイね」の合計数を表示する方法

全ての投稿に紐づく「イイね」の合計数を表示

RailsでSNS系の個人アプリを制作している途中で、1つの投稿に結びついているイイねの合計は簡単に表示できたのですが、ユーザー1人の全ての投稿に結びついているイイねの合計を取得し、表示するのには一工夫必要だったのでその方法をご紹介します。

目次

1. アソシエーションの定義

この機能を実装するにあたって登場するモデルは、下記の3になります。

  • Userモデル(ユーザー)
  • Postモデル(投稿)
  • Likeモデル(イイね)

まずはアソシエーションの定義から。

# user.rb
has_many :posts
has_many :likes

# post.rb
belongs_to :user
has_many :likes

# like.rb
belongs_to :user
belongs_to :post

2. users_controller.rbの編集

次に、users_controllerで「User」に結びつく全ての「Post」を取得していきます。

# paramsに入っている値から、ユーザーを取得し@userに代入する。
@user = User.find(params[:id])

# 取得したユーザーに結びついている全ての投稿を取得し、@user_postsに代入する。
@user_posts = @user.posts

最後に「@user_posts」にeach文を使い、1つの投稿に紐づくイイねを、用意した変数に順番に足していきます。

# 変数を定義し、0を代入。
@likes_count = 0

# countメソッドを使い、1つの投稿に結びつくイイねを予め定義しておいた@likes_countに足していく。
@user_posts.each do |post|
  @likes_count += post.likes.count
end

あとはview側で@likes_countを表示してあげれば、イイねの合計数を表示することができます。

まとめ

ユーザーの全ての投稿に紐づくいいねの合計数を表示するには、

  1. アソシエーションの定義
  2. 投稿の取得
  3. each文を使い変数に足していく

この3つの作業が必要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Webベンチャー企業で働くエンジニア | 効率化のためのツール開発とかが好きな人 | ブログ最高月間収益18万 | 千葉県1995年11月生まれ | 当ブログでは「プログラミング・デザイン・ブログ」に関する内容を中心に、役立つ情報を発信します

目次