ruby-on-rails - 使用 AASM 状态机处理 Rails 错误

标签 ruby-on-rails state state-machine aasm

我正在使用 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/

相关文章:

ruby-on-rails - spring/application.rb :161 undefined method `reject!' for nil:NilClass (NoMethodError)

javascript - Rails JavaScript 开发 : debug vs releases

javascript - 如何更新 React 状态中的单个属性(函数组件)

functional-programming - 如何在 Ocaml 中表示一个简单的有限状态机?

javascript - 未捕获的 TypeError : this. state.map 不是函数

ruby-on-rails - 通过组关系列出属于用户的文档模型的所有实例

ruby-on-rails - 非空白字符的剥离方法?

switch-statement - 嵌入式系统的状态机

ios - 如何以允许使用 GKStateMachine 再次输入的方式保存以前的状态?

ruby - Ruby 中的动态状态机?状态机必须是类吗?