hometoast
hometoast

Reputation: 11782

How do I select the max child value in ActiveRecord?

I'm not even sure how to word this, so an example:

I have two models,

Chicken   
  id   
  name

EggCounterReadings
  id   
  chicken_id   
  value_on_counter
  timestamp

I don't always record a count for every chicken when I do counts.

Using ActiveRecord how do I get the latest egg count per chicken?

So if I have 1 chicken and 3 counts, the counts would be 1 today, 15 tomorrow, and 18 the next day. That chicken has laid 18 eggs, not 34

UPDATE: Found exactly what I was trying to do in MySQL. Find "The Rows Holding the Group-wise Maximum of a Certain Column". So I need to .find_by_sql("SELECT * FROM (SELECT * FROM EggCounterReadings WHERE <conditions> ORDER BY timestamp DESC) GROUP BY chicken_id")

Upvotes: 0

Views: 1596

Answers (1)

Brian
Brian

Reputation: 6840

Given your updated question, I've changed my answer.

chicken = Chicken.first
count = chicken.egg_counter_readings.last.value_on_counter

If you don't want the latest record, but the largest egg yield, then try this:

chicken = Chicken.first
count = chicken.egg_counter_readings.maximum(value_on_counter)

I believe that should do what you want.

Upvotes: 1

Related Questions