2012-01-02 68 views
0

我正在rails中开发应用程序,在那里我使用了state_machine(https://github.com/pluginaweek/state_machine/)。if-else条件检查rails状态机

这里我想检查条件在一个状态,根据条件 状态从另一个状态的变化。 (即考虑状态1,状态2和 状态3是如果状态(A> B){状态1 =>状态2}其他{状态1 =>状态3})

我想知道这将如何在完成,状态机。 请在此帮助我

回答

2

在state_machine中,您可以定义更改基础对象状态的事件。您还可以将状态属性设置为所需的状态。

在你的情况,你会怎么做:

a.state = a > b ? "state2" : "state3" 
a.save! 

您还可以检查与国家:

a.state1? 

你应该做的是定义描述了从状态1到状态2的过渡事件或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

+0

谢谢安德鲁,你的意思是说为每个路径定义单独的事件我明白了。 – 2012-01-02 08:52:23