HABTM ilişkilendirmesi olan iki ActiveRecord
modelim var.Bir habtm derneği arel tablosu nasıl alınır?
Arel kullanarak yetim kayıtlarını almak için scope
yazmak istiyorum.
Sorunum, ilişkinin arel_table
sürümünü almak için bir yöntem bulamadığım. İlişki HABTM olduğundan, arel_table
numaralı telefonu aramak için model yoktur.
Şu an (şimdi çalışır) var, ancak birleştirme tablosunun adıyla (reflect_on_association
yöntemini kullanarak alınan) yeni bir yayın tablosu oluşturuyorum.
SELECT `teachers`.*
FROM `teachers`
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`
FROM `groups_teachers`))
Yani arel_table
almak yerine yenisini yapmak için daha iyi bir yol yoktur:
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))
}
Bu aşağıdaki SQL üretir? Maalesef
Not: Bunu yapmanın daha temiz bir yolu olduğunu düşünüyorum, cevabımı aşağıya bakın. – Andrew