NoMethodError: undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module
NoMethodError: undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module
我已经开发这个 RoR 5.1 应用程序一段时间了,现在我需要添加一个新的迁移:
class AddActiveFlagToParameters < ActiveRecord::Migration[5.1]
def change
add_column :parameters, :is_active, :boolean, :default => true
end
end
当我尝试 运行 迁移时,rails 引发错误:
NoMethodError: undefined method
`halt_callback_chains_on_return_false=' for ActiveSupport:Module
仔细阅读,我终于通过升级到 Rails 5.2 (gem activesupport 5.2.0) 并注释掉文件 config/initializers/new_framework_defaults.rb[ 中的行解决了这个问题。 =12=]
但这听起来像是一个短期解决方案。
这是从哪里来的?我怎样才能安全地处理这个问题?
初始化程序中的 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 returns false
则回调链不会停止。要显式停止回调链,我们需要使用 throw(:abort)
.
因此您需要检查应用程序中所有 before_callbacks
的行为是否正确,如果需要,请更改它们,然后从初始化程序中删除此行。
你可以阅读更多here
我已经开发这个 RoR 5.1 应用程序一段时间了,现在我需要添加一个新的迁移:
class AddActiveFlagToParameters < ActiveRecord::Migration[5.1]
def change
add_column :parameters, :is_active, :boolean, :default => true
end
end
当我尝试 运行 迁移时,rails 引发错误:
NoMethodError: undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module
仔细阅读,我终于通过升级到 Rails 5.2 (gem activesupport 5.2.0) 并注释掉文件 config/initializers/new_framework_defaults.rb[ 中的行解决了这个问题。 =12=]
但这听起来像是一个短期解决方案。
这是从哪里来的?我怎样才能安全地处理这个问题?
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 returns false
则回调链不会停止。要显式停止回调链,我们需要使用 throw(:abort)
.
因此您需要检查应用程序中所有 before_callbacks
的行为是否正确,如果需要,请更改它们,然后从初始化程序中删除此行。
你可以阅读更多here