2010-11-17 2 views
0

Я даже не знаю, как слово это, так что пример:Как выбрать максимальное дочернее значение в ActiveRecord?

У меня есть две модели,

Chicken 
    id 
    name 

EggCounterReadings 
    id 
    chicken_id 
    value_on_counter 
    timestamp 

Я не всегда записывать счетчик для каждого цыпленка, когда я отсчеты.

Использование ActiveRecord Как получить последнее количество яиц на курицу?

Итак, если у меня есть 1 цыпленок и 3 грамма, подсчет будет 1 сегодня, 15 завтра и 18 на следующий день. Этот цыпленок положил 18 яиц, а не 34

UPDATE: Нашел то, что я пытался сделать в MySQL. Найдите «The Rows Holding the Group-wise Maximum of a Certain Column». Так что мне нужно .find_by_sql("SELECT * FROM (SELECT * FROM EggCounterReadings WHERE <conditions> ORDER BY timestamp DESC) GROUP BY chicken_id")

+0

Это VASTLY упрощено, но это лучшее, что я мог бы сделать, чтобы объяснить, что я ищу. – hometoast

+0

Почти дубликат: http://stackoverflow.com/questions/185569/fetching-minimum-maximum-for-each-group-in-activerecord – hometoast

ответ

1

Учитывая ваш обновленный вопрос, я изменил свой ответ.

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

Если вы не хотите последнюю запись, но наибольший выход яйца, то попробуйте следующее:

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

Я считаю, что должен делать то, что вы хотите.

+0

Спасибо. Однако я записываю более одного элемента для каждой записи. Думайте об этом таким образом, куры счастливо кладут яйца весь день, счетчик ниже них. Я прихожу и читаю счетчик для каждого цыпленка и записываю его. Возможно, я мог бы переименовать вторую модель в LayedEggCount. – hometoast

+0

Спасибо за дополнительную информацию, я обновил свой ответ – Brian

+0

Это выглядит хорошо. Возможно, я пытаюсь оптимизировать, прежде чем у меня возникнут проблемы. Но позже у меня будет много цыплят. Есть ли способ получить сборник максимальных показаний счетчика яиц, сгруппированных курицей? Что бы я делал в SQL, это SELECT MAX (value_on_counter) как value_on_counter, id, rest, of, fields group by chicken_id. – hometoast

Смежные вопросы