有没有办法在state_machine
gem中访问该功能?有点像水平:
def check_if_editor
redirect_to :root unless current_user.editor? OR ANY NEXT STATE
end
在文档中找不到多少。谢谢!
答案 0 :(得分:1)
我认为没有。我遇到了相同的要求,并通过创建一个检查每个可接受状态的方法来解决它。我并不完全满意,因为如果引入新状态,可能需要将其添加到列表中。
def after_state1?
state2? || state3?
end
我在state_machine gem上看到了一个封闭的讨论(现在再也找不到了),他们说他们不想实现状态排序,因为它太复杂了。
答案 1 :(得分: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