Не проверено, но что-то вроде этого должно работать:
@user.entries.select('DAYOFWEEK(sent_at) as day, AVG(value) as average').group('1').all
ПРИМЕЧАНИЕ : Когда вы используете select
для явного указания столбцов, возвращаемые объекты только для чтения .Rails не может надежно определить, какие столбцы можно и нельзя изменять.В этом случае вы, вероятно, не пытаетесь изменить выбранные столбцы, но вы можете изменить свои столбцы sent_at
или value
через полученные объекты либо.
Проверьте ActiveRecordЗапрос руководства для ознакомления с тем, что здесь происходит, в довольно дружественном для новичков формате.Да, и если этот запрос не работает, пожалуйста, отправьте ответ, чтобы другие, которые могут наткнуться на это, могли это видеть (и я, возможно, смогу обновить).1018 * возвращая массив, мы можем вместо этого попробовать join
:
User.where(:user_id => params[:id]).joins(:entries).select('...').group('1').all
Опять же, я не знаю, будет ли это работать.Обычно вы можете указать where
после joins
, но я не видел, чтобы select
комбинировался там.Хитрость здесь в том, что select
, вероятно, вообще исключит возвращение каких-либо данных о user
.Возможно, имеет смысл просто отказаться от find_by_*
методов в пользу написания метода в модели Entry
, который просто вызывает ваш запрос с помощью select_all
( docs ) и пропускает сопоставление ассоциации.