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