Tôi có hai mô hình ActiveRecord
có liên kết HABTM.Làm thế nào để có được bảng arel của một hiệp hội habtm?
Tôi muốn viết scope
để nhận hồ sơ trẻ mồ côi bằng Arel.
Vấn đề của tôi là tôi không thể tìm thấy phương thức truy xuất số arel_table
của liên kết. Vì mối quan hệ là HABTM, không có mô hình nào để gọi arel_table
vào.
Hiện tại, tôi có thông tin sau (hoạt động), nhưng tôi tạo một bảng Arel mới với tên của bảng nối (được truy xuất bằng cách sử dụng phương thức 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))
}
này tạo ra các SQL sau:
SELECT `teachers`.*
FROM `teachers`
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`
FROM `groups_teachers`))
Vì vậy, có cách nào tốt hơn để lấy arel_table
thay vì làm một cái mới?
Lưu ý, tôi nghĩ rằng có một cách rõ ràng hơn để thực hiện việc này, xem câu trả lời của tôi bên dưới. – Andrew