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

时间:2018-04-10 02:05:30

标签: 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

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

  

NoMethodError:未定义的方法   `halv_callback_chains_on_return_false ='for ActiveSupport:Module

回过头来看,我最终解决了这个问题,升级到Rails 5.2(gem activesupport 5.2.0)并在文件config / initializers / new_framework_defaults.rb

中注释掉了这一行。

但这听起来像是短期解决方案。

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

1 个答案:

答案 0 :(得分:14)

初始化程序中的

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

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

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

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

您可以阅读更多here