2012-12-21 111 views
0

我正在使用Ruby on Rails 3.2.9,我只是試圖使用state_machine gem。我有以下語句:如何在每次觸發事件時設置屬性值?

class Article < ActiveRecord::Base 
    state_machine :attribute => :status, :initial => :unconfirmed do 
    state :confirmed, :value => 'confirmed' 
    state :unconfirmed, :value => 'unconfirmed' 

    event :confirm do 
     transition :unconfirmed => :confirmed 
    end 

    event :unconfirm do 
     transition :confirmed => :unconfirmed 
    end 
    end 
end 

我也爲Article模型意守最後一次:status切換到:confirmedconfirmed_at屬性。

如何將confirmed_at屬性初始化爲當前時間? 應如何每次觸發:confirm事件時,我將confirmed_at設置爲當前時間?

回答

0

看起來這就是before_transition的用途。

before_transition :confirmed => any - :confirmed, :do => :set_confirmed_at 

然後由該名稱添加一個方法:

def set_confirmed_at 
    self.confirmed_at = Time.now 
end 
+0

如何初始化'confirmed_at'屬性爲當前時間? – user12882

+0

'set_confirmed_at'方法不能做到這一點? –

+0

我的意思是當對象是一個* new *對象並且不改變狀態(即,'confirm'事件沒有被觸發時)的情況。 – user12882

相關問題