更新关联的父级而不会导致无限的回调循环

时间:2012-01-17 07:24:40

标签: ruby-on-rails ruby-on-rails-3 callback

我有三种型号:折扣,旗帜和旗帜。

# Discount.rb
has_many :flaggings, :uniq
has_many :flags, through: :flaggings,
         before_add: :update_flags,
         before_remove: :update_flags

before_validation :unpublish_when_ended, if: :ended_changed?

def update_flags(flag)
  flag.discounts_count = flag.discounts.count
  self.published = self.flags.include?(Flag.published)
end

def unpublish_when_ended
  if self.ended?
    self.flags.delete(Flag.published)
  end
end

我想要实现的是,我想在折扣(discount << Flag.published)中添加已发布的标记,并将折扣的published列更新为true。还有一个回调,所以当折扣结束时,发布的标志将被删除。

但是使用上面的代码,不会保存已发布的列。

我无法在discount.save回调中调用update_flags,因为当unpublish_when_ended回调继续调用自身时,会发生堆栈溢出/无限回调循环。

有没有办法解决这个问题?谢谢!

0 个答案:

没有答案