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

时间:2015-02-13 22:30:03

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord callback

在我的学生模型中,我触发方法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

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

1 个答案:

答案 0 :(得分:1)

您可以使用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