我正在使用AASM来管理状态,并且只是希望有一些列可以跟踪状态更改的时间,但回调似乎不起作用。当然,问题可能在于我的方法,我只是不确定。
aasm_state :active, :after => :activate
aasm_state :inactive
aasm_state :deactivated, :after => :deactivate
aasm_event :active do
transitions :to => :active, :from => [:inactive]
transitions :to => :active, :from => [:deactivated]
end
aasm_event :deactivated do
transitions :to => :deactivated, :from => [:active]
end
def activate
activated_at = Time.now
end
def deactivate
deactivated_at = Time.now
end
答案 0 :(得分:4)
在AASM的Rails 3版本中,您需要将回调应用于转换事件,而不是状态。 所以你的代码可以是 -
aasm_state :active
aasm_event :active, :after => :activate do
transitions :to => :active, :from => [:inactive]
transitions :to => :active, :from => [:deactivated]
end
答案 1 :(得分:1)
使用aasm时,您不必在模型上调用激活/停用功能。
你还需要保存模型,所以当你执行object.activate
之后,object.save
也会{{1}}(至少在我使用的最后一个版本中就是这样)
过渡似乎写得很好,所以我不认为那些是问题