2013-07-19 1 views

ответ

1

не думаю есть. Я столкнулся с одним и тем же требованием и решил его, создав метод, который проверяет каждое приемлемое состояние. Я не совсем этому доволен, потому что, если новое состояние будет введено, оно может быть добавлено в список.

def after_state1? 
    state2? || state3? 
end 

я увидел закрытое обсуждение на state_machine драгоценного камня (не может найти его сейчас снова), где они сказали, что они не хотят, чтобы осуществить государственный заказ, потому что это сделало бы его слишком сложным.

+0

Это позор. Это было половиной причины, по которой я использовал 'state_machine' в этом случае. –

0

Вы можете использовать методы конечного автомата state_paths (который возвращает массив переходов из одного указанного состояния в другое) и to_states (который преобразует результат в хороший массив состояний).

redirect_to :root unless editor_or_later? 

def editor_or_later? 
    states_after_editor = current_user.state_paths(:from => :editor, :to => :some_end_state).to_states 
    states_editor_or_later = [:editor] + states_after_editor 

    states_editor_or_later.include? current_user.state.to_sym 
end