我正在尝试使用 before_validation 回调来调整记录的子对象的数量,但由于某种原因,它没有按我期望的方式工作。
LineItem 类:
before_validation :adjust_enrollment_count
def adjust_enrollment_count
if enrollments.size < quantity
(enrollments.size+1..quantity).each do |li|
self.enrollments.build(variant: self.variant)
end
#self.save
elsif enrollments.size > quantity
enrollments.delete_if do |e|
enrollments.size > quantity
end
end
end
发生的情况是它创建了正确数量的 Enrollment 对象作为 LineItem 的子项,但 Variant 被设置为 nil(即使 LineItem 定义了一个变体)。
我尝试过的事情:
- 显式保存 line_item 或注册
- “窥探”回调并手动运行代码(这实际上按我预期的方式工作!)
- 验证“self”指的是 LineItem 而不是闭包
我缺少关于回调生命周期的某些内容吗?随着 LineItem 数量的变化,是否有更好的方法来调整 Enrollment 对象的数量?