我正在使用rails开发应用程序,我使用了state_machine(https://github.com/pluginaweek/state_machine/)。
在这里,我想根据条件检查一个州的状况 状态从另一个州改变。 (即考虑 state1,state2和 state3是状态if(a> b){state1 => state2} else {state1 => state3}),
我想知道如何在状态机中完成。 请帮助我解决这个问题。
答案 0 :(得分:2)
在state_machine中,您可以定义更改基础对象状态的事件。您还可以将state属性设置为所需的状态。
在你的情况下,你会这样做:
a.state = a > b ? "state2" : "state3"
a.save!
您还可以使用以下方式检查状态:
a.state1?
您应该做的是定义一个描述从state1到state2或state3的转换的事件。例如:
state_machines :state, initial: :state1 do
...
event :go_to_state2 do
transition state1: :state2
end
event :go_to_state3 do
transition state1: :state3
end
...
end
然后,你转换状态如下:
if a > b
a.go_to_state2!
else
a.go_to_state3!
end
使用事件可以更清晰地操纵状态。 Readme on the plugin's github page
涵盖了这一点