tomtom
tomtom

Reputation: 1190

Rails sort collection by association count

I'm working in Rails 4, and have two relevant models:

Account Model
has_many :agent_recalls, primary_key: "id", :foreign_key => "pickup_agent_id", class_name: "Booking"

Hence, queries like Account.find(10).agent_recalls would work.

What I want to do is sort the entire Account collection by this agent_recalls association.

Ideally it'd look something like (but obviously not):

@agents = Account.where(agent: true).order(:agent_recalls)

Question: What's the correct query to output an ordered list, by this agent_recall count?

Upvotes: 0

Views: 335

Answers (1)

Demi Magus
Demi Magus

Reputation: 3437

Well to accomplish what you are looking for you have 2 options:

first, only a query, but it will implied a join, so there will be lost the Accounts that doesn't have any agent_recalls, so i will discard this option

second, i think this one is more appropriate for what you are trying to do

Account.find(:all, :conditions => { :agent => true }, :include => :agent_recalls).sort_by {|a| a. agent_recalls.size}

As you can see is a mix between a query and ruby, hope it helps :)

Upvotes: 1

Related Questions