Как получить таблицу arel ассоциации habtm?

У меня есть две модели ActiveRecord , которые имеют ассоциацию HABTM.

Я хочу написать область , чтобы получать потерянные записи с помощью Arel.

Моя проблема в том, что я не смог найти метод для получения arel_table ассоциации. Поскольку отношение является HABTM, не существует модели для вызова arel_table .

Теперь у меня есть следующее (что работает), но я создаю новую таблицу arel с именем таблицы соединения (полученной с помощью метода Reflection_on_association ).

scope :orphans, lambda {
    teachers = arel_table
    join_table = Arel::Table.new(reflect_on_association(:groups).options[:join_table])

    join_table_condition = join_table.project(join_table[:teacher_id])
    where(teachers[:id].not_in(join_table_condition))
}

Это дает следующий SQL:

SELECT `teachers`.* 
FROM `teachers`    
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`  
                               FROM `groups_teachers` ))

Есть ли лучший способ получить arel_table вместо создания новой?

5
задан Maher4Ever 24 December 2012 в 17:39
поделиться