ruby-on-rails 从AASM的模型中获取状态/事件列表

lh80um4z  于 2023-01-06  发布在  Ruby
关注(0)|答案(6)|浏览(114)

我成功地将最新的AASMgem集成到应用程序中,使用它来创建向导。

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属于order_flow。
到目前为止没有问题。现在我想让我的管理员能够动态地将现有的转换/事件添加到订单流图中。
现在的问题是,我找不到从订单模型中获取所有事件/转换列表的任何可能性。aasm_states_for_select似乎是正确的候选项,但我无法在订单模型中调用它。
有人能帮忙吗?
先谢了。

ffdz8vbo

ffdz8vbo1#

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

oug3syen

oug3syen2#

我不明白OrderFlow是如何与Order和Transitions一起工作的,但我认为您只是为了更好地解释您的场景而将其包括在内。
ClassName.aasm_states_for_select为您提供模型中声明的状态列表。

cig3rfwq

cig3rfwq3#

对于3.1.1中的events,我使用Model.aasm.events.keys来获得一个事件名称符号数组,在最近的版本中,.map(&:name)不会为您做这件事。

lo8azlld

lo8azlld4#

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

inkz8wg9

inkz8wg95#

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

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

=〉[:已创建,:已提交,:已拒绝,:已批准]

9gm1akwq

9gm1akwq6#

在5.4.0版本中,它现在看起来是一个数组,因此我们回到

Model.aasm.events.map(&:name)

相关问题