AlexBrand
AlexBrand

Reputation: 12399

ActiveAdmin: sort by association count

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

Upvotes: 2

Views: 2983

Answers (1)

Vapire
Vapire

Reputation: 4578

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

Upvotes: 7

Related Questions