:has_many best practice search order


#1

I have a model_one that :has_many model_two-s, I would like to find the
ten model_one’s that have the most model_two’s. What is the best way to
do this?

Model_One.find(:all, :limit => 10, :include => :model_two, :order
=>“themost of model_two desc”)

or inorder for me to do this effeciently (I have thousands of
model_two-s) would i need to add a column to model_one, to keep track of
the number of model_two-s that model_one owns. Or is there some index i
can use? What is the best practice in this situation?


#2

Richard S. wrote:

I have a model_one that :has_many model_two-s, I would like to find the
ten model_one’s that have the most model_two’s. What is the best way to
do this?

Something like this?

Model_One.find(:all, :limit => 10, :joins => :model_two,
:order => “count(model_twos.model_one_id) desc”,
:group => “model_ones.id”)

I could do it in raw SQL, but I don’t know the exact match. Fred Cheung
or
someone will correct me if I got it wrong!

The :joins is so you don’t eager-load the models and interfere with the
group
concept, I suspect. The group is so you are allowed to count within each
group.