Ho due modelli ActiveRecord
che hanno un'associazione HABTM.Come ottenere la tabella Arel di un'associazione di habtm?
Desidero scrivere un scope
per ottenere i record orfani utilizzando Arel.
Il mio problema è che non sono riuscito a trovare un metodo per recuperare il arel_table
dell'associazione. Poiché la relazione è HABTM, non esiste un modello per chiamare arel_table
su.
Ho il seguente ora (che funziona), ma faccio una nuova tabella di Arel con il nome della tabella di join (recuperato utilizzando il metodo 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))
}
Questo produce il seguente SQL:
SELECT `teachers`.*
FROM `teachers`
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`
FROM `groups_teachers`))
Così, c'è un modo migliore per recuperare il arel_table
invece di fare una nuova?
Nota, penso che ci sia un modo più pulito per fare ciò, vedere la mia risposta qui sotto. – Andrew