Tengo dos modelos ActiveRecord
que tienen una asociación HABTM.¿Cómo obtener la tabla arel de una asociación habtm?
Quiero escribir un scope
para obtener los registros huérfanos usando Arel.
Mi problema es que no pude encontrar un método para recuperar el arel_table
de la asociación. Como la relación es HABTM, no hay ningún modelo para llamar al arel_table
.
Tengo lo siguiente ahora (que funciona), pero hago una nueva tabla arel con el nombre de la tabla de unión (recuperada mediante el método 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))
}
Esto produce el siguiente SQL:
SELECT `teachers`.*
FROM `teachers`
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`
FROM `groups_teachers`))
Entonces, ¿hay alguna forma mejor para recuperar el arel_table
en lugar de hacer una nueva?
Nota, creo que hay una manera más clara de hacerlo, vea mi respuesta a continuación. – Andrew