rails after_save无限循环

Viv*_*123 6 ruby-on-rails ruby-on-rails-3

我有一个模型存储零售店的详细信息.

在Outlet模型中,我有一个前置过滤器

after_save :is_outlet_verified

def is_outlet_verified
    if self.latitude.present? && self.longitude.present?
      self.update_attributes(:is_verified => true)
    else
      self.update_attributes(:is_verified => false)
    end
  end
Run Code Online (Sandbox Code Playgroud)

如果出口地理编码,我想设置is_verified字段true.但是,当成功执行is_outlet_verified时,它会触发after_save回调,这会再次触发is_outlet_verified.

sev*_*cat 17

理想情况下,你会在before_save回调中做这样的事情,而不是after_save- 只需设置is_verified属性然后让保存正常进行.

如果你真的需要这样做,你可以使用update_column而不是update_attribute,这将跳过所有回调.

需要注意的一点是 - 如果before_save回调返回false,则保存将不会继续.


Ric*_*eck 5

.update_attributes调用该.save方法,因此调用它after_save会创建一个无限循环

我会这样做before_save,像这样:

before_save :is_outlet_verified

  def is_outlet_verified
    if self.latitude.present? && self.longitude.present?
      self.is_verified = true
    else
      self.is_verified = false
    end
  end
Run Code Online (Sandbox Code Playgroud)