2012-01-02 69 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