我有一個使用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