【发布时间】:2020-02-25 10:47:46
【问题描述】:
所以我在ActiveRecord 模型中有一个after_update 回调来通知外部服务。只有在更新几个属性时才应该调用它。所以我将saved_change_to_attribute? 调用封装在一个方法中,然后在回调过滤器中使用:
after_update :tell_service!, if: :update_for_service?
def update_for_service?
saved_change_to_name? ||
saved_change_to_city?
end
现在update_for_service? 总是返回false,我不明白为什么。
在控制台中:
> p = Person.last
> p.name = 'Tom'
> p.save
true
> p.saved_change_to_name?
true
> p.update_for_service?
false
这是怎么回事?
【问题讨论】:
-
如果您将
binding.pry放入您的update_for_service?会发生什么? -
您在此模型上是否还有其他可能会干扰的回调?我设置了一个与您相同的模型,它的工作方式完全符合您的预期。尝试从头开始制作模型或选择一个非常简单的模型并在该模型中尝试您的代码。代码肯定可以工作。
-
有什么解决办法吗?我也面临同样的问题。
标签: ruby-on-rails activerecord ruby-on-rails-5