:has_many best practice search order

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?

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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs