这是我在模型中after_create :set_after_create
之后调用的钩子方法。
def set_after_create
passphrase = "#{id}+#{Time.zone.now.to_date}#{Rails.application.secrets.secret_key_base}"
update(
ref: CryptLib.sha1(passphrase),
token_key: CryptLib.sha1("#{passphrase}+#{Random.rand(20)}")
)
end
现在,我收到警告:
DEPRECATION WARNING:
attribute_changed?
内部的行为 回调后将在下一版本的Rails中进行更改。新的 返回值将反映调用该方法之后的行为save
返回(例如与它现在返回的相反)。至 保持当前行为,使用saved_change_to_attribute?
代替。 (从set_after_create调用at /app/app/models/project.rb:330)
我不理解警报和方法之间的联系。
PS:我没有使用update_columns
方法收到任何警告,但我认为这不是正确的方法。
配置:Rails 5.1.4和所有宝石更新。
答案 0 :(得分:0)
我认为您在同一模型中的其他位置使用attribute_changed?
。
方法attribute_changed?
将在rails较新版本中弃用。因此,不要使用attribute_changed?
,而是使用will_save_change_to_attribute?
有关详细信息,请参阅here。