【发布时间】:2013-02-14 19:45:42
【问题描述】:
我使用工作流作为状态机。我想在每次更新后将状态移动到awaiting_review,但在用户登录后我也有current_sign_in_at属性,他的状态更改为awaiting_review如何避免这种情况?
before_save :needs_review, on: :update
# before_save
def needs_review
self.state = 'awaiting_review' unless state_changed?
end
workflow do
state :awaiting_review do
event :accept, :transitions_to => :accepted
event :reject, :transitions_to => :rejected
end
state :accepted do
event :reject, :transitions_to => :rejected
end
state :rejected
end
# sign_in_count :integer default(0)
# current_sign_in_at :datetime
# last_sign_in_at :datetime
# current_sign_in_ip :string(255)
# last_sign_in_ip :string(255)
【问题讨论】:
-
哪些字段更新应该触发状态变化?您可以使用
changed方法来专门检测这些。 -
除我在 cmets 中提到的这些以外的所有字段:[sign_in_count ..]
标签: ruby-on-rails ruby ruby-on-rails-3 state-machine state-machine-workflow