web-dev-qa-db-ja.com

NoMethodError:ActiveSupport:Moduleの未定義のメソッド `halt_callback_chains_on_return_false = '

私はこのRoR5.1アプリケーションをしばらく開発してきましたが、今すぐ新しい移行を追加する必要があります。

class AddActiveFlagToParameters < ActiveRecord::Migration[5.1]
  def change
    add_column :parameters, :is_active, :boolean, :default => true 
  end
end

移行を実行しようとすると、Railsはエラーを発生させます:

NoMethodError:ActiveSupport:Moduleの未定義のメソッド `halt_callback_chains_on_return_false = '

読んで、私はついにRails 5.2(gem activesupport 5.2.0)にアップグレードし、ファイルconfig/initializers/new_framework_defaults.rbの行をコメントアウトすることで、この問題を回避しました。

しかし、これは短期的な解決策のように聞こえます。

これはどこから来たのですか?この問題を安全に処理するにはどうすればよいですか?

9
user1185081

イニシャライザーの_halt_callback_chains_on_return_false_設定は、Rails 5.0にアップグレードした後、古いコールバックの動作を一時的に維持するためのソリューションでした。アプリ内のすべてのコールバックをチェックする時間が必要であり、その後は次のことができると想定しています。この設定を削除します。5.2へのアップグレード時にすべてがすでにチェックされていると想定しているため、この設定は削除されます。

Before Rails 5、ActiveModelまたはActiveModel :: Validationsのbefore_コールバックからfalseを返すと、ActiveRecordとActiveSupportがコールバックチェーンを停止しました。

Rails 5.0、before_コールバックがfalseを返す場合、コールバックチェーンは停止されません。コールバックチェーンを明示的に停止するには、throw(:abort)を使用する必要があります。

したがって、アプリ内のすべての_before_callbacks_が適切に動作するかどうかを確認し、必要に応じて変更して、その後の初期化子からこの行を削除する必要があります。

あなたはもっと読むことができます ここ

16
Vasilisa