我有三种型号:折扣,旗帜和旗帜。
# 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
回调继续调用自身时,会发生堆栈溢出/无限回调循环。
有没有办法解决这个问题?谢谢!