1

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

これは

4

1 に答える 1