justinxreese
justinxreese

Reputation: 1896

Find ActiveRecord object by maximum field value of a child object?

How can I find the object associated with the results of an ActiveRecord Calculation rather than a value?

For example I have @parent which has many children. I would like to find the child with the maximum 'value'.

I understand that I can do @parent.children.maximum(:value), but this returns the maximum value. Is there a method similar to maximum and minimum that returns the entire object instead of the value so that I can use different fields from the maximum object?

Upvotes: 33

Views: 33514

Answers (4)

Len
Len

Reputation: 2145

This is my personal favorite when it comes to readability, by using ruby's #max_by :

@parent.children.max_by(&:value)

Upvotes: 10

Will Ayd
Will Ayd

Reputation: 7164

Not sure if this is the most efficient but once you have the maximum value you can pass that along in a hash to get the object

@maxvalue = @parent.children.maximum(:value)
@myObject = @parent.children.where(:value => @maxvalue)

Upvotes: 27

jemminger
jemminger

Reputation: 5173

@parent.children.first(:conditions => {:value => @parent.children.maximum(:value)})

Upvotes: 6

fl00r
fl00r

Reputation: 83680

@parent.children.order("value DESC").first

Upvotes: 58

Related Questions