"`attribute_changed?`在回调之后的行为"经过一个基本的“保存”

时间:2017-11-17 08:48:59

标签: ruby-on-rails activerecord

这是我在模型中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和所有宝石更新。

1 个答案:

答案 0 :(得分:0)

我认为您在同一模型中的其他位置使用attribute_changed?。 方法attribute_changed?将在rails较新版本中弃用。因此,不要使用attribute_changed?,而是使用will_save_change_to_attribute? 有关详细信息,请参阅here