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
何が起こるかというと、LineItemの子として正しい数の登録オブジェクトが作成されますが、Variantはnilに設定されます(LineItemにバリアントが定義されている場合でも)。
私が試したこと:
- line_itemまたは登録を明示的に保存する
- コールバックに「こじ開け」てコードを手動で実行します(これは実際には私が期待したとおりに機能しました!)
- 「自己」がクロージャーではなくLineItemを参照していることを確認する
私が見逃しているコールバックのライフサイクルについて何かありますか?LineItemの数量が変化したときに、登録オブジェクトの数を調整するためのより良い方法はありますか?