Возьмем следующую простую объектную модель, например:
class Course
has_many :enrollments
has_many :students, :through => :enrollments, :after_add => :send_email
def send_email(student)
puts "Email Sent"
end
end
class Enrollment
belongs_to :course
belongs_to :student
end
class Student
has_many :enrollments
has_many :courses, :through => :enrollments
end
Я хотел бы выполнить send_email
после добавления одного или нескольких студентов в курс, однако after_add запускается после добавления каждого элемента в коллекцию студентов.
bill = Student.first
carl = Student.last
Course.first.students << [bill, carl]
Будет выводить
Email Sent
Email Sent
Как я могу поймать одно событие после того, как ВСЕ элементы добавлены в коллекцию?
Можно ли вставить записи в таблицу enrollments
в одном запросе для всех учащихся, а не по одному на каждого учащегося?
Есть ли в Rails какой-либо встроенный механизм или мне нужно написать собственную логику для перехвата, а затем вызовы пакетной очистки send_email
?
Спасибо за любую информацию!