2

I have the following models

class User < ActiveRecord::Base
   has_many :reviews
end

class Review < ActiveRecord::Base
   belongs_to :user
end

I would like to sort the users on my ActiveDdmin page by the number of reviews that each user has.

I tried this, but no luck: (from this SO question)

ActiveAdmin.register User do
  filter :name
  index do
    column :name
    column :email
    column "Facebook" do |u|
      if u.provider == "facebook"
        "Yes"
      end
    end
    column "No. of reviews", :sortable => :"reviews.count" do |u|
      u.reviews.count
    end

  end

  controller do
    def scoped_collection
      end_of_association_chain.includes(:reviews)
    end
  end
end
Community
  • 1
  • 1
AlexBrand
  • 11,971
  • 20
  • 87
  • 132

1 Answers1

7

I'd suggest to use a counter_cache on your user model for your reviews and then simply use this column in ActiveAdmin directly:

index do
  # ...
  column "No. of reviews", :sortable => :reviews_count
end
Vapire
  • 4,568
  • 3
  • 24
  • 41