Ruby on rails 3.1 使用:if语法更新hook之后

Ruby on rails 3.1 使用:if语法更新hook之后,ruby-on-rails-3.1,hook,Ruby On Rails 3.1,Hook,如果对象的status\u为值是以下两个值之一,则我希望在更新后激活我的hook: after_update :set_activity_log, :if => :status_was == 'In' or :status_was == 'Out' 我可以让它与#status_changed?一起工作,但是它仍然会触发所有其他可能的状态更改,并且我必须添加逻辑来检查回调方法中的In或Out 我觉得这应该可以在钩子定义中实现,而不是在set\u activity\u log方法中实现。您可

如果对象的
status\u为
值是以下两个值之一,则我希望在更新后激活我的
hook:

after_update :set_activity_log, :if => :status_was == 'In' or :status_was == 'Out'
我可以让它与
#status_changed?
一起工作,但是它仍然会触发所有其他可能的状态更改,并且我必须添加逻辑来检查回调方法中的In或Out

我觉得这应该可以在钩子定义中实现,而不是在
set\u activity\u log
方法中实现。

您可以将过程传递给ActiveRecord回调:

after_update :set_activity_log,
  :if => proc {|obj| obj.status_was == 'In' || obj.status_was == 'Out' }

谢谢Jordan,这和lambda{| obj | obj.status|u was='In'| | obj.status|u was='Out'一样吗。对于Rails来说还是非常新的,我读了文档的这一部分,没有看到它的应用程序hereProcs和Ruby中的lambdas非常相似。