我正在使用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
答案 0 :(得分:2)
使用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
答案 1 :(得分:1)
我知道在rubyist-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
让我知道你的想法?