0

有没有办法在state_machinegem 中访问该功能?有点像关卡:

def check_if_editor
  redirect_to :root unless current_user.editor? OR ANY NEXT STATE
end

在文档中找不到太多内容。谢谢!

4

2 回答 2

1

我不认为有。我遇到了同样的要求,并通过创建一个检查每个可接受状态的方法来解决它。我对此并不完全满意,因为如果引入了新状态,则可能需要将其添加到列表中。

def after_state1?
  state2? || state3?
end

我在 state_machine gem 上看到了一个封闭的讨论(现在找不到了),他们说他们不想实现状态排序,因为它会使它变得太复杂。

于 2013-07-19T02:06:43.657 回答
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
于 2015-09-26T00:36:23.313 回答