2014-10-10 21 views
5

Tôi đang sử dụng AASM. Có thể 2 tiểu bang khác nhau tùy thuộc vào điều kiện Ví dụ:AASM: Chuyển tiếp sang 2 trạng thái khác nhau tùy theo điều kiện

aasm_event :completes do 
    transitions :to => condition? ? :complete : :terminate, 
       :from => [:active] 
end 

mục đích của việc này là bởi vì tôi đang sử dụng mã di sản và có rất nhiều "hoàn thành" cuộc gọi và chấm dứt tình trạng là mới.

Tôi đã thử ghi đè trong một file mới máy nhà nước như

aasm_event :completes do 
    transitions :to => :terminate, 
       :from => [:active] 
end 

nhưng nó đã không làm việc, nó vẫn đi để hoàn thành trạng thái

Trả lời

8

Sử dụng một guard:

aasm_event :completes do 
    transitions :from => [:active], :to => :complete, :guard => condition? 
    transitions :from => [:active], :to => :terminate 
end 

def condition? 
    some_contition 
end 

Điều này sẽ chuyển sang :complete nếu condition? là đúng, nếu không nó sẽ chuyển sang :terminate.

+0

hoạt động tốt đẹp hoàn hảo tnx – zetacu

Các vấn đề liên quan