У меня есть три модели: Скидка, Флаг и Пометка.
# 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
продолжит вызывать сам себя.
Есть ли способ решить это? Спасибо!