Reputation: 1896
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
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
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
Reputation: 5173
@parent.children.first(:conditions => {:value => @parent.children.maximum(:value)})
Upvotes: 6