如何在更新对象后始终将状态更改为awaiting_review?

时间:2012-11-24 16:01:48

标签: ruby-on-rails ruby ruby-on-rails-3 state-machine

我在应用程序中有以下状态机:

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

1 个答案:

答案 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 

只有在模型的特定属性发生变化时才会更新。