Я пытаюсь построить этот запрос в AREL:Построение подзапроса с AREL в Rails3
SELECT FLOOR(AVG(num)) FROM (
SELECT COUNT(attendees.id) AS num, meetings.club_id FROM `meetings` INNER JOIN `attendees` ON `attendees`.`meeting_id` = `meetings`.`id` WHERE (`meetings`.club_id = 1) GROUP BY meetings.id) tmp
GROUP BY tmp.club_id
возвращает среднее число посетителей за встречу, за клуб. (Клуб имеет много встреч и встреча имеет много участников)
До сих пор я (объявленный в классе Club < ActiveRecord :: Base):
num_attendees = meetings.select("COUNT(attendees.id) AS num").joins(:attendees).group('meetings.id')
Arel::Table.new('tmp', self.class.arel_engine).from(num_attendees).project('FLOOR(AVG(num))').group('tmp.club_id').to_sql
, но я получаю ошибку:
undefined method `visit_ActiveRecord_Relation' for #<Arel::Visitors::MySQL:0x9b42180>
Документация для генерации нетривиальных запросов ARel немного затруднительна. Я использую http://rdoc.info/github/rails/arel/master/frames. Я неправильно подхожу? Или я несколько методов от решения?
MetaWhere устарела для Squeel, а Squeel теперь устарела без замены. Менее инвазивным и в настоящее время поддерживается решение isl-helpers: https://github.com/camertron/arel-helpers – Peeja