所以我正在调试我facing的问题而且我很难理解为什么attribute_before_last_save
与attribute_was
的工作方式不同,因为docs我能得到的只是attribute_before_last_save
{ {1}}的行为与attribute_was
类似,但在我的情况下,我获得nil
一个而另一个获得正确值。
答案 0 :(得分:2)
在Rails 5.1.4中查看attribute_was
的来源时,您会找到这一行
emit_warning_if_needed("attribute_was", "attribute_before_last_save")
根据source code,它会引发以下弃用错误
回调后的
attribute_was
内部的行为将会发生 在下一个版本的Rails中进行更改。新的返回值将反映出来 在save
返回后调用方法的行为(例如与之相反的行为) 它现在返回)。要保持当前行为,请使用attribute_before_last_save
代替。
答案 1 :(得分:1)
attribute_before_last_save(attr_name):返回上次保存前属性的原始值。 行为与attribute_was类似。此方法在之后非常有用 回调以在保存之前获取属性的原始值 刚刚发生的
回调后 受其影响
假设用户模型具有name
属性:
class User < ApplicationRecord
after_update :find_name_before_last_save
def find_name_before_last_save
puts "+++++++++++++++"
puts name_before_last_save
end
end
答案 2 :(得分:1)
attibute_before_last_save
仅在将数据成功保存到db后起作用。
如果保存前有回调,则应使用attibute_was
。