在迁移中,我禁用了回调,例如:
class AlignUserAreaToCountry < ActiveRecord::Migration
def up
# disable the after_initialize :_set_defaults callback
User.skip_callback(:initialize, :after, :_set_defaults)
...
end
end
我应该在同一个User.set_callback(...)
方法结束时拨打up
吗?
答案 0 :(得分:2)
上次我记得,您需要使用set_callback
重新启用回调。值得庆幸的是,您可以将一个块传递给skip_callback
并运行迁移,因此您不需要明确地执行此操作:
User.skip_callback(:initialize, :after, :_set_defaults) do
add_column :users, :first_name, :string
end
ActiveSupport :: Callbacks :: ClassMethods,http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html
中的更多信息但是,此解决方案不是线程安全的。我建议使用虚拟属性(例如dont_apply_callbacks),如果它存在,则跳过所需的回调。