【问题标题】:Rails - shall I set_callbacks after skip_callbacks?Rails - 我应该在skip_callbacks之后设置_callbacks吗?
【发布时间】:2018-06-13 14:24:01
【问题描述】:

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

class AlignUserAreaToCountry < ActiveRecord::Migration
  def up
    # disable the after_initialize :_set_defaults callback
    User.skip_callback(:initialize, :after, :_set_defaults)
    ...
  end
end

我应该在同一 up 方法的末尾调用 User.set_callback(...) 吗?

【问题讨论】:

    标签: ruby-on-rails callback database-migration rails-migrations


    【解决方案1】:

    我记得上次,您确实需要使用 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),如果存在,请跳过所需的回调。

    【讨论】:

    猜你喜欢
    • 2012-04-09
    • 2015-10-05
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2021-11-08
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多