Rails - 在skip_callbacks之后我应该set_callbacks吗?

问题描述 投票:0回答:1

在迁移中,我禁用了回调,例如:

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吗?

ruby-on-rails callback database-migration rails-migrations
1个回答
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),如果它存在,则跳过所需的回调。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.