Rails / 記事数で並べ替える

たまにアソシエーションされたモデルのレコード数が多い順に並べ替えたいことがある。
いろいろやり方はあるだろうけど、一番簡単なのはこれかな。
  

Userモデルにカウンター用のカラムをつくる


class AddPostsCountToUser < ActiveRecord::Migration
  def change
    add_column :users, :posts_count, :integer, default: 0
  end
end

  
  
Postレコードがつくられたら、Userのposts_counterを更新するように設定。


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。

class AdminsController < ApplicationController
  def index
    @users = User.by_posts
  end
end

以上です。

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた