2012-11-24 11 views
0

我已经在应用以下状态机:如何在更新对象后总是将状态更改为awaiting_review?

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

你使用ActiveRecord吗? – Shtirlic

+0

是的,我喜欢。这是Rails应用程序。 – tomekfranek

+0

也许你应该定义AR after_update回调calliting事件awaiting_review – Shtirlic

回答

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 

这只会更新时,模型的特定属性变化。

+0

以外的所有属性嗯,我收到错误:'''NoMethodError:undefined method'event'for#'' – tomekfranek

+0

你在哪里放了事件方法?它需要在状态机中。 – dealer

+0

看起来您正在使用其他状态机gem - 工作流不支持此语法,并且不允许从所有状态转换到其他任何状态 –

相关问题