aasm column: :status, whiny_transitions: false do
state :requested, initial: true
state :approved
event :approve, after: :after_approve do
transitions from: :requested, to: :approved
end
end
def after_approve
raise "This is a test"
end
字符串
鉴于以上所述,我希望能够调用obj.approve!
并仍然让它返回true或false,以便我可以处理模型中的异常,向对象添加错误并在控制器中处理它。
我尝试过返回false,错误处理程序等,但似乎没有办法在不引发的情况下从after回调中停止事件,也没有任何方法可以捕获异常处理并返回false(我可以找到)。
作为一种变通方法,我不得不创建一个新方法来 Package 对approve!
的调用
def approve_with_errors
approve!
rescue StandardError => e
errors.add(:base, "Error: #{e}")
false
end
型
在aasm中有什么方法可以不添加这些 Package 器就实现这一点吗?
顺便说一下,在Rails中,在回调之后,你需要引发ActiveRecord::RecordInvalid, self
,回调链将被中止,但异常不会传递到堆栈。要在before_
回调中执行相同的操作,可以执行throw(:abort)
https://github.com/rails/rails/issues/33192
我还在AASM Github中创建了一个问题
1条答案
按热度按时间8cdiaqws1#
如果引发
ActiveRecord::Rollback
(而不是RecordInvalid
),那么Rails在回滚数据库后不会将该异常传播到链的上游。所以...字符串