Ruby Rails 跳过模型中特定方法的更新回调

Ruby on Rails skip update callback on specific method in model

在我的 Student 模型中,我触发了一个方法 after_update,但问题是我必须在该方法中保存。这导致无限递归循环:

class Student < ActiveRecord::Base

after_update :delete_inactive_student_schedules

def delete_inactive_student_schedules
  if self.status_was == active and self.status == paused
    self.missing_schedule_at = nil
    self.save!
    self.schedules.destroy_all
  end
end

有没有办法在方法内保存后跳过更新回调?

您可以使用 update_columns 更新列而不触发回调和验证。

所以在你的情况下

if self.status_was == active and self.status == paused
  self.update_columns(:missing_schedule_at => nil)
  self.schedules.destroy_all
end

http://apidock.com/rails/ActiveRecord/Persistence/update_columns