Ruby on rails 已保存\u是否将\u更改为\u属性?在方法内部调用时始终返回false
因此,我在Ruby on rails 已保存\u是否将\u更改为\u属性?在方法内部调用时始终返回false,ruby-on-rails,activerecord,ruby-on-rails-5,Ruby On Rails,Activerecord,Ruby On Rails 5,因此,我在ActiveRecord模型中有一个after\u update回调来通知外部服务。只有在更新两个属性时才应调用此函数。因此,我将saved\u change\u to\u属性?调用封装在一个方法中,然后在回调过滤器中使用该方法: after_update :tell_service!, if: :update_for_service? def update_for_service? saved_change_to_name? || saved_change_to_city?
ActiveRecord
模型中有一个after\u update
回调来通知外部服务。只有在更新两个属性时才应调用此函数。因此,我将saved\u change\u to\u属性?
调用封装在一个方法中,然后在回调过滤器中使用该方法:
after_update :tell_service!, if: :update_for_service?
def update_for_service?
saved_change_to_name? ||
saved_change_to_city?
end
现在update\u for\u服务?
总是返回false
,我不明白为什么
在控制台中:
> p = Person.last
> p.name = 'Tom'
> p.save
true
> p.saved_change_to_name?
true
> p.update_for_service?
false
这是怎么回事?这是由于在回调生命周期中运行更新后的
造成的。说明:
在事务块中调用保存后的,\u创建后的,\u更新后的,因此它们将在执行SQL语句之前执行
如果要在语句执行完成时执行某些操作,则应使用回调
如果将绑定.pry
放在update\u for\u服务中会发生什么情况?
?此型号上是否有其他可能会造成干扰的回调?我建立了一个和你一样的模型,它完全按照你的预期工作。尝试从头开始创建一个模型,或者选择一个非常简单的模型,然后在该模型中尝试您的代码。代码肯定会起作用。