Rails 5.0.0から5.1.1にアップグレードしました。次のような大量の非推奨警告が出始めました。
非推奨の警告:コールバック後の_
changed_attributes
_の動作は、Railsの次のバージョンで変更されます。新しい戻り値は、save
が返された後のメソッド呼び出しの動作を反映します(たとえば、現在の戻り値の反対)。現在の動作を維持するには、代わりにsaved_changes.transform_values(&:first)
を使用してください。
この:
非推奨の警告:コールバック後の_
attribute_changed?
_の動作は、Railsの次のバージョンで変更されます。新しい戻り値は、save
が返された後のメソッド呼び出しの動作を反映します(たとえば、現在の戻り値の反対)。現在の動作を維持するには、代わりに_saved_change_to_attribute?
_を使用してください。
私はプロジェクトのどこかでこれらのメソッドを明示的に使用していません。警告は、主にモデルの作成と更新の呼び出しを指しています。
私の検証と_after_update
_および_after_create
_コールバックで_if: { author_id_changed? }
_のようなコンディションを使用していることと関係があると思いますが、どうすればよいかわかりません。
また、警告は this ActiveRecordへの大規模な更新に関連していると思います。
あなたがこれで与えることができるどんな手でも感謝します。
[〜#〜]更新[〜#〜]
この記事 たくさん助けてくれました!
まあ、bundle update
を実行し、gemを更新し、さらに この記事 に従ってattribute_changed?
コールバック(after_
コールバックとvalidations
は除く)のbefore_
呼び出しを変更し、attribute_was
からattribute_before_last_save
。
Afterコールバックの場合、saved_change_to_attribute?を使用できます
Beforeコールバックと検証では、will_save_change_to_attribute?を使用できます
この情報がお役に立てば幸いです。
あなたは変えられる author_id_changed?
からsaved_change_to_author_id?
Rails 5.1.6へのアップグレードを実行しましたが、同じ廃止警告が出ています。もし誰かがまだこの警告を解決したいと思っているなら。これが私が取ったステップです:
Your*_changed?
をすべて検索
これを変更しました:
if name_changed?
...
if user_id_changed?
これをafter_*
(after_save、after_commit、after_updateなど)ブロック内にある場合:
if saved_change_to_name?
...
if saved_change_to_user_id?
AND before_*
(before_save、before_commit、before_updateなど)ブロックの内部にある場合:
if will_save_change_to_name?
...
if will_save_change_to_user_id?
私自身の意見では、これはattribute_changed?
に慣れているので、変更が非常に難しいことです。しかし、変化は良いです。構文も今ではより意味のあるものになりました。