我一直在开发这个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
中注释掉了这一行。但这听起来像是短期解决方案。
这是从哪里来的?我怎样才能安全地处理这个问题?
答案 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