У меня есть две ActiveRecord
модели, которые имеют ассоциацию HABTM.
Я хочу написать scope
, чтобы получить записи-сироты с использованием Arel.
Моя проблема в том, чтоНе могу найти метод для получения arel_table
ассоциации.Поскольку отношение HABTM, нет модели для вызова arel_table
.
Теперь у меня есть следующее (что работает), но я создаю новую таблицу с именем объединяемой таблицы (полученную с помощью метода reflect_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
вместо создания нового?