从AASM模型中获取状态/事件列表

时间:2010-06-07 11:07:50

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

我成功地将最新的AASM gem集成到一个应用程序中,使用它来创建向导。在我的情况下,我有一个模型订单

class Order < ActiveRecord::Base

  belongs_to :user
  has_one :billing_plan, :dependent => :destroy
  named_scope :with_user, ..... <snip>

  include AASM

  aasm_column :aasm_state
  aasm_initial_state :unauthenticated_user

  aasm_state :unauthenticated_user, :after_exit => [:set_state_completed]
  aasm_state : <snip>

  <and following the event definitions>

end

现在我想让管理员通过AASM状态创建自己的图表。因此,我创建了另外两个名为OrderFlow和Transition的模型,其中order_flow有许多转换,订单为belongs_to order_flow。

到目前为止没问题。现在我想让我的管理员可以动态地将现有的转换/事件添加到order_flow图。

现在的问题是,我没有找到任何可能从我的订单模型中获取所有事件/转换的列表。 aasm_states_for_select似乎是正确的候选人,但我不能在我的订单模型上调用它。

有人可以帮忙吗?

提前谢谢。 J.

5 个答案:

答案 0 :(得分:3)

我不明白OrderFlow如何使用Order和Transitions,但我认为你只是将其包括在内以便更好地解释你的场景。

ClassName.aasm_states_for_select为您提供模型中声明的状态列表。

答案 1 :(得分:2)

使用版本3.0.18,您可以使用ClassName.aasm.states

答案 2 :(得分:1)

另外,并非100%确定您要求的是什么,但如果您想要为您的模型声明所有状态和事件,您可以通过分别调用Order.aasm_states和Order.aasm_events来获取这些状态和事件。

答案 3 :(得分:0)

可以使用更优雅的Ruby语法,如下面的IRB中的示例。您将获得符号数组中的所有允许状态。

1.9.3-p0 :011 > ApprovalRequest.aasm_states.map(&:name)

=&GT; [:created,:submitted,:rejected,:approved]

答案 4 :(得分:0)

对于3.1.1中的事件,我使用Model.aasm.events.keys获取了一系列事件名称符号。在最近的版本中,.map(&:name)不会为您做到这一点。