我需要一点状态机的帮助,因为我正在使用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”但我不知道为什么不起作用,因为另一个状态运行良好。
感谢您的时间!问候 !
答案 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