ActiveRecord保存关联自动导致无限循环

时间:2015-07-26 07:17:42

标签: ruby-on-rails activerecord

我有以下两种模式:

class Inquiry < ActiveRecord::Base
  has_one :offer

  around_save :check_status

  def check_status
    status_changed = self.status_changed?

    yield

    if status_changed
      .
      .
      .
    end
  end
end

class Offer < ActiveRecord::Base
  belongs_to :inquiry

  around_save :check_status

  def check_status
    status_changed = self.status_changed?

    yield

    if self.inquiry && status_changed
      status = ...
      self.inquiry.update_attribute('status', status)
    end
  end
end

并非每个商品都必然属于查询,但是当我尝试保存商品时,会触发循环,其中商品check_status会尝试更新查询状态,并且出于某种原因yield调查check_status中的1}}尝试自动保存优惠,再次触发查询状态更新,导致stack level too deep错误。

我尝试在autosave: false之后添加has_one :offer,但它没有用。什么可能导致这个问题的想法以及如何解决它?

1 个答案:

答案 0 :(得分:0)

如果将来遇到类似的问题,我最终会像Nafaa建议的那样改变模型所有权方向,并解决了这个问题。