我有一个使用state_machine gem(https://github.com/pluginaweek/state_machine)来跟踪模型状态的Rails 3.1应用程序。和state_machine-audit_trail gem(https://github.com/wvanbergen/state_machine-audit_trail)保存状态更改。使用state_machine&state_machine_audit_trail返回到之前保存的状态
#State Machine states for Work Orders
state_machine :initial => :created do
after_transition :on=>:validate, :do=>:create_report
store_audit_trail
event :validate do
transition :created => :validated
end
event :reject do
transition :created => :rejected
end
end
有一种独特的状态“拒绝”这是暂时的,我正在寻找一种方式来触发一个事件到模型返回为保存在WorkOrderStateTransition模型中的前一个状态(通过审计提供宝石)。
我创建了一个方法'previous_state',它发现最后一个状态转换,并且当通过控制台调用该方法时,它确实返回了以前的状态名称。
问题是我无法在state_machine转换中调用该方法以将其用作还原的目标状态。举例来说,像这样的东西是行不通的:
event :restore do
transition :rejected => lambda {|wo| wo.previous_state}
end
我得到的状态是一个Proc。
我原以为这是一个非常常见的用例(回到以前保存的状态),但是我在搜索时发现了很少的信息。唯一相关的帖子是Using pluginaweek's state_machine, can I reference the activerecord object during an event?但是这不使用审计宝石提供的工作流历史记录,并且还将状态返回到“恢复”状态,这不是我所需要的。
有没有人遇到过这个相同的用例?我对Ruby/Rails有点新鲜,我意识到这可能完全是由于我对lambda表达式和变量作用域缺乏理解,但我一直在为这个问题奋斗了几天,并且确实可以使用一些帮助!
谢谢!
Aww加油! _Tumbleweed_徽章? – SimonMD