ARel でこのクエリを作成しようとしています。
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を使用していますが、これにアプローチするのは間違っていますか? それとも、解決策から離れたいくつかの方法がありますか?