7

我成功地将最新的 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 有许多转换,并且 order belongs_to order_flow。

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

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

任何人都可以帮忙吗?

提前谢谢。J。

4

5 回答 5

7

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

于 2013-05-21T23:44:57.173 回答
3

我不明白 OrderFlow 如何与 Order 和 Transitions 一起使用,但我假设您只是将其包含在内以更好地解释您的场景。

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

于 2010-10-26T15:55:25.403 回答
2

对于事件3.1.1我曾经Model.aasm.events.keys获得一组事件名称符号。在最近的版本.map(&:name)中不会为你做这件事。

于 2014-04-29T19:27:49.793 回答
1

此外,不是 100% 确定您要的是什么,但如果您想要为您的模型声明的所有状态和事件,您可以通过分别调用 Order.aasm_states 和 Order.aasm_events 来获得它们。

于 2010-12-05T03:38:38.393 回答
0

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

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

=> [:created, :submitted, :rejected, :approved]

于 2012-11-05T11:22:59.473 回答