Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails if else条件检查rails状态机_Ruby On Rails_Ruby_Ruby On Rails 3_If Statement - Fatal编程技术网

Ruby on rails if else条件检查rails状态机

Ruby on rails if else条件检查rails状态机,ruby-on-rails,ruby,ruby-on-rails-3,if-statement,Ruby On Rails,Ruby,Ruby On Rails 3,If Statement,我正在rails中开发应用程序,在那里我使用了状态机(https://github.com/pluginaweek/state_machine/) 在这里,我想根据条件检查一种状态下的条件 状态从另一个状态更改。(请考虑 STATE1、STATE2和 如果(a>b){state1=>state2}或者{state1=>state3}),则state3是状态 我想知道这将如何在状态机中实现。 请帮助我在这个状态机中定义更改基础对象状态的事件。还可以将state属性设置为所需的状态 在你的情况下,你

我正在rails中开发应用程序,在那里我使用了状态机(https://github.com/pluginaweek/state_machine/)

在这里,我想根据条件检查一种状态下的条件 状态从另一个状态更改。(请考虑<强> STATE1、STATE2和 如果(a>b){state1=>state2}或者{state1=>state3}),则state3是状态

我想知道这将如何在状态机中实现。
请帮助我在这个

状态机中定义更改基础对象状态的事件。还可以将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

使用事件是操纵状态的一种更干净的方式。感谢andrew,你的意思是为我想到的每一条路径定义单独的事件。