Rails - 条件跳转回调(after_save)

时间:2016-07-28 15:07:29

标签: ruby-on-rails activerecord

我在after_save上有一个方法(并且必须在after_save之后完成,因为我使用了对象的id),但我在表单中添加了一个checkbox属性,当我更改它时#s; s值,自然它通过回调来保存。但是在只有那个复选框改变的情况下,我不想调用那个方法...想要通过所有的验证/回调。我可以检查object.changes?是否只有该复选框属性,但是一旦方法是after_save,我就不再拥有该信息了。我可以在before_save之前执行check_method,并且可以在保存时跳过回调(如何)?或者还有另一个建议?谢谢!

2 个答案:

答案 0 :(得分:0)

您可以知道某个属性是否已更改或将更改为_changed添加到该属性的名称。

选项1

after_save :some_method

def some_method
  if email_changed?
    // do some stuff
  end
end

选项2

after_save :some_method, if: :email_changed?

def some_method
  // do some stuff
end

答案 1 :(得分:0)

after_saveafter_commit回调中,如果列出的唯一属性是复选框属性,则可以使用previous_changes检查已更改的属性和短路。