state_machineを使用して特定の属性の更新を保護しようとしていますが、正しく機能していないようです。
状態が次のときに特定の属性の更新をロックしたいcompleted
しかし、STATEcompleted
で発火する代わりに、完了への移行中にも発火します... つまり、状態が終了する前に、状態を完全に防ぎます!
例えば
## BLOCK CHANGES MADE IN COMPLETED OR FAILED STATE
validate :lock_down_attributes_when_published, :if => Proc.new { |log| log.state?(:completed) }
また
validate :lock_down_attributes_when_published, :if => Proc.new { |log| log.completed? }
と
private
def lock_down_attributes_when_published
return unless completed?
message = "must not change when #{state}"
errors.add(:head_count, message) if head_count_changed?
errors.add(:quiz_master_id, message) if quiz_master_id_changed?
errors.add(:qm_fee, message) if qm_fee_pennies_changed?
errors.add(:total_fee, message) if total_fee_pennies_changed?
end
これは