Rails:这个或更晚的状态的state_machine方法?

时间:2013-07-19 01:05:20

标签: ruby-on-rails ruby-on-rails-3 state-machine

有没有办法在state_machine gem中访问该功能?有点像水平:

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

在文档中找不到多少。谢谢!

2 个答案:

答案 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