Я думаю, что-то вроде этого должно работать.
event :promote do
transitions :from => [:pending], :to => :in_progress, :guard => :boolean_check?
transitions :from => [:pending], :to => :done
end
event :complete do
transitions :from => [:in_progress], :to => :done, :guard => :boolean_check?
end
private
def boolean_check?
self.boolean_column
end
Если логическое значение истинно, поток будет
pending > in_progress > done
иначе
pending > done
ПРИМЕЧАНИЕ: Это может стать сложным, если, скажем, у вас есть 3-4 рабочих процесса.
Это нормально, пока у вас нет 2 рабочих процессов