2016-09-23 81 views
3

红宝石2.1.8 轨3.2.18Rails的ActiveRecord的条件回调问题

我想运行一个回调时,只有当一个特定的属性已经改变保存记录。例如

before_save :do_the_thing, if: :my_attr_changed? 

但是,当我改变my_attr和保存,do_the_thing没有得到 调用。然而,如果我做同样的事情,但是:

before_save :do_the_thing 

def do_the_thing 
    puts my_attr_changed? 
end 

它在日志中输出“true”。在这里很困惑。任何帮助赞赏。谢谢。

+2

如果你使用一个lambda,而不是一个符号,会发生什么? 'before_save:do_the_thing,如果: - > {my_attr_changed? }' – max

+0

虽然在这里使用符号应该工作。您是否创建了一个复制问题的测试,并且完全确定错误不在方法中? – max

+0

符号应该工作 –

回答

4

只是移动它内部的λ

before_save :do_the_thing, if: -> { my_attr_changed? }