我可以跳过状态转换的验证吗?

时间:2014-05-28 14:32:02

标签: ruby-on-rails validation state-machine

我目前正在使用state_machine gem

如果我有以下状态机:

state_machine :status, do
  state :published, :deleted

  event :remove do
    transition published: :deleted
  end
end

当我的对象无效时,任何状态转换都会失败:

post.valid? => false
post.remove! => 
  StateMachine::InvalidTransition: Cannot transition status via :remove from :published

我希望无需验证检查即可转换,类似于:ActiveRecord#save(validate: false)

在状态转换期间是否有一种跳过ActiveRecord验证的好方法?

1 个答案:

答案 0 :(得分:0)

鉴于你的评论,这个问题主要是关于当前验证不是最新的旧记录,我会说你可以做两件事:

  1. 更新所有记录以符合当前模型验证。这可能很难,需要时间(可能还需要调整验证和测试)
  2. 使用Model.update_column state: 'deleted'Model.where(_to_be_deleted_).update_all state: 'deleted'
  3. 更新那些省略验证(而不是使用状态机)的记录