使用AASM状态机进行Rails错误处理

Cim*_*imm 6 state ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

tsd*_*own 1

我知道在 ruby​​ist-aasm 2.0.2 中你可以调用 add '!' 如果转换失败,转换方法调用将返回 false。假设您有一个名为approve的控制器方法:

def approve
  @event = Event.find params[:id]

  if @event.approve!
    # transition occurred
  else
    # handle the failed transition (flash or errors)
  end
end
Run Code Online (Sandbox Code Playgroud)

让我知道你的想法?