我正在使用 rubyist-aasm用于处理我的 Event 对象中不同状态的状态机(事件初始化、事件讨论、事件发布等)。我添加了守卫以防止在不满足某些条件时发生状态变化。
这一切正常,但当守卫拒绝状态更改时,它不会显示任何错误。知道我怎么能看到状态没有改变吗?我可以手动检查状态,但这听起来像一个丑陋的解决方案。
aasm_state :firststate
aasm_state :secondstate
aasm_event :approve do
transitions :to => :secondstate, :from => [:firststate], :guard => :has_a_price?
end
def has_a_price?
self.price.present?
end
最佳答案
与 SimpleStateMachine您可以通过添加错误来保护状态转换:
def approve
errors.add(:price, 'Invalid') if price.blank?
end
event :approve, :firststate => :secondstate
尽管在这种情况下,存在的价格与事件无关,因此足以执行以下操作:
validates_presence_of :price, :if => "self.second_state?"
event :approve, :firststate => :secondstate
关于ruby-on-rails - 使用 AASM 状态机处理 Rails 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2019071/