我在应用程序中有以下状态机:
class Cv < ActiveRecord::Base
include Workflow
workflow do
state :new do
event :submit, :transitions_to => :awaiting_review
end
state :awaiting_review do
event :review, :transitions_to => :being_reviewed
end
state :being_reviewed do
event :accept, :transitions_to => :accepted
event :reject, :transitions_to => :rejected
end
state :accepted
state :rejected
end
def submit
halt unless valid?
end
end
# cvs_controller.rb
def update
@cv = Cv.find(params[:id])
if @cv.update_attributes(params[:cv])
# @cv.back_to_review!
redirect_to root_path
end
end
我希望在更新对象后始终将状态移动到awaiting_review
。
所以我应该添加每个状态块event :back_to_review!, :transitions_to => :awaiting_reviewed
??
我正在使用这个宝石:https://github.com/geekq/workflow
答案 0 :(得分:1)
您可以尝试这样:
修改:根据您的评论
before_save do |w|
w.transition_to_awaiting_review if w.changes['attr_name']
end
event :transtion_to_awaiting_review do
transition all => :awaiting_review
end
只有在模型的特定属性发生变化时才会更新。