NoMethodError:ActiveSupport的未定义方法`halt_callback_chains_on_return_false =':模块

use*_*081 8 ruby-on-rails activesupport

我一直在开发这个RoR 5.1应用程序,现在我需要添加一个新的迁移:

class AddActiveFlagToParameters < ActiveRecord::Migration[5.1]
  def change
    add_column :parameters, :is_active, :boolean, :default => true 
  end
end
Run Code Online (Sandbox Code Playgroud)

当我尝试运行迁移时,rails会引发错误:

NoMethodError:ActiveSupport的未定义方法`halt_callback_chains_on_return_false =':模块

阅读,我终于解决了这个问题,升级到Rails 5.2(gem activesupport 5.2.0)并在文件config/initializers/new_framework_defaults.rb中注释掉这一行.

但这听起来像是一个短期解决方案.

这是从哪里来的?我怎样才能安全地处理这个问题?

Vas*_*isa 16

halt_callback_chains_on_return_false初始化程序中的设置是在升级到Rails 5.0之后临时保留旧回调行为的解决方案.假设您需要时间检查应用程序中的所有回调,之后您可以删除此设置.并且假设在升级到5.2时已经检查了所有内容,因此删除了此设置.

在Rails 5之前,false从ActiveModel或ActiveModel :: Validations中的任何before_回调返回,ActiveRecord和ActiveSupport导致停止回调链.

如果有任何before_ callback返回,则从Rails 5.0开始,false然后不停止回调链.要明确停止回调链,我们需要使用throw(:abort).

因此,您需要检查before_callbacks应用程序中的所有行为是否正确,如果需要,请更改它们,然后从初始化程序中删除此行.

你可以在这里阅读更多

  • 具体来说,按照[此处](/sf/answers/3571430551/)所述调整行为后,在`config/initializers/new_framework_defaults.rb`中注释掉`ActiveSupport.halt_callback_chains_on_return_false = false`。 (5认同)