Мне нужно вычислить значения при сохранении модели в Rails. Поэтому я вызываю calculate_averages
как обратный вызов для класса Survey
:
before_save :calculate_averages
Однако иногда (и изначально у меня есть 10k записей, которые нуждаются в этой операции) Мне нужно вручную обновить все средние значения для каждой записи. Нет проблем, у меня есть код вроде следующего:
Survey.all.each do |survey|
survey.some_average = (survey.some_value + survey.some_other_value) / 2.to_f
#and some more averages...
survey.save!
end
Прежде чем запускать этот код, я волнуюсь, что calculate_averages
будет вызван и дублируется, и, возможно, даже вызовет некоторые проблемы с тем, как я делаю. Хорошо, тогда я думаю, хорошо, я просто ничего не сделаю и позволю calculate_averages
получить вызов и сделать свое дело. Проблема в том, что есть, во-первых, способ заставить callbacks получать вызов, даже если вы не внесли никаких изменений в запись?
Во-вторых, способ вычисления средних значений намного более эффективен, чтобы просто не позволять обратным вызовам вообще вызываться и делать средние значения для всего сразу. Возможно ли, чтобы вызываемые вызовы не вызывались?