State Machine Rails 4不会回到初始状态

时间:2015-12-04 01:37:50

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

我需要一点状态机的帮助,因为我正在使用rails 4我有一个名为in_analysis的初始状态,其他状态称为批准和拒绝,状态批准和拒绝工作正常我没有问题通过到州,但我不能回到称为in_analysis的初始状态,这是我的代码:

应用/模型/ profile.rb

state_machine :state, :initial => :in_analysis do
 state :in_analysis, :approved, :rejected

 state :approved do
  validates :name, presence: true
 end

 event :approved do
  transition in_analysis: :approved
 end

 event :reject do
  transition in_analysis: :rejected
  transition approved: :rejected
 end
end

在我的控制器中我有这个:

  def update
   @profile.state = :in_analysis

   @profile = current_user.profile

  respond_to do |format|
   if @profile.update(profile_params)
    format.html { redirect_to edit_profile_path(@profile), notice:     t(:update, scope: [:messages, :controllers, :profiles, :successfully]) }
    format.json { render :show, status: :ok, location: edit_profile_path(@profile) }
   else
    format.html { render :edit }
    format.json { render json: @profile.errors, status: :unprocessable_entity }
  end
 end
end

所以我的目标是当配置文件更新时状态回到最初的“in_analysis”但我不知道为什么不起作用,因为另一个状态运行良好。

感谢您的时间!问候 !

1 个答案:

答案 0 :(得分:1)

假设您的state_machine是正确的,那么唯一可能出错的地方是

@profile.state = :in_analysis

@profile = current_user.profile

您将state分配给:in_analysis,然后实际将@profile分配给从数据库中提取的旧current_user.profile,从而放弃了对:in_analysis的分配。

您可以尝试交换两行:

@profile = current_user.profile
@profile.state = :in_analysis