2012-12-21 68 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

相关问题