if-else条件检查rails状态机

时间:2012-01-02 08:38:10

标签: ruby-on-rails ruby ruby-on-rails-3 if-statement

我正在使用rails开发应用程序,我使用了state_machine(https://github.com/pluginaweek/state_machine/)。

  

在这里,我想根据条件检查一个州的状况   状态从另一个州改变。 (即考虑 state1,state2和   state3是状态if(a> b){state1 => state2} else {state1 => state3})

我想知道如何在状态机中完成。  请帮助我解决这个问题。

1 个答案:

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

涵盖了这一点