Rails - 在观察者中添加验证

时间:2015-01-29 10:43:07

标签: ruby-on-rails validation ruby-on-rails-4 activerecord

您好我的模型上有状态机,我需要在观察者上添加验证。我试过的时候

def before_transition(record, transition)
  to = transition.to.to_s
  record.errors.add(:state, "Can't cancel") if to == 'cancel'
  return false
end

当我用better_errors和binding_of调用者gem调试它时,我可以看到错误添加到记录中。

>> record.errors.any?
=> true

但它正在保存记录。

如果我将before_update方法添加到观察者。在before_transition方法之后运行

def before_update(record)
  >> record.errors.any?
  => false       
end

错误消失。

如何取消观察员中某些条件的更新过程。

PS:我无法在模型中使用验证方法,因为我无法在自定义验证器方法中进行转换。

1 个答案:

答案 0 :(得分:0)

我不知道这是否正确,但我用

解决了
raise ActiveRecord::Rollback, "There is an error"

我用作

def before_transition(record, transition)
  to = transition.to.to_s
  record.errors.add(:state, "Can't cancel") if to == 'cancel'
  if record.errors.any?
    raise ActiveRecord::Rollback, "There is an error"
  end
end