Rails跳过回调方法

1. 方法跳过

使用下列方法可跳过回调:

decrement decrement_counter delete delete_all increment increment_counter

toggle touch update_column update_columns update_all update_counters

2. 跳过validate验证

保存的时候用validate: false

user.save(:validate => false)

3. create,save相关回调(ex: after_create, before_save)

例如以下代码 after_create回调

class User < ActiveRecord::Base
  after_create :send_email

  def send_email
    #send email to user
  end

end

rails 提供skip_callback(name, *filter_list, &block)方法跳过回调。在执行完skip_callback后要执行set_callback方法恢复回调。

User.skip_callback(:create, :after, :send_email)

user = User.new
user.email = "xxxx"
user.save

User.set_callback(:create, :after, :send_email)

上面这种方法虽然可行,但是存在线程安全的问题。

下面是线程安全的跳过回调的方法。

class User < ActiveRecord::Base
  after_create :send_email, unless: :skip_send_email

  attr_accessor :skip_send_email

  def send_email
    #send email to user
  end
end


# 这样就会跳过回调
user = User.new
user.skip_send_email = true
user.email = "xxxx"
user.save

 

posted @ 2021-07-23 11:26  wangyuyu  阅读(210)  评论(0编辑  收藏  举报