Rails / 記事数で並べ替える
たまにアソシエーションされたモデルのレコード数が多い順に並べ替えたいことがある。
いろいろやり方はあるだろうけど、一番簡単なのはこれかな。
Userモデルにカウンター用のカラムをつくる
ruby
1
2
3
4
5
6
7
class AddPostsCountToUser < ActiveRecord::Migration
def change
add_column :users, :posts_count, :integer, default: 0
end
end
Postレコードがつくられたら、Userのposts_counterを更新するように設定。
ruby
1
2
3
4
5
6
7
8
9
10
class User < ActiveRecord::Base
has_many :posts
scope :by_posts, order('posts_count DESC')
end
class Post < ActiveRecord::Base
belongs_to :user, counter_cache: true
end
こんな感じでコントローラーで呼び出せばOK。
ruby
1
2
3
4
5
class AdminsController < ApplicationController
def index
@users = User.by_posts
end
end
以上です。