【问题标题】:Getting list of states/events from a model that AASM从 AASM 的模型中获取状态/事件列表
【发布时间】:2010-06-07 11:07:49
【问题描述】:

我成功地将最新的 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.

【问题讨论】:

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


    【解决方案1】:

    对于版本3.0.18,您应该使用ClassName.aasm.states

    【讨论】:

    • ClassName.aasm.states.map(&amp;:name) 会给你一个符号数组,这可能是你想要的。
    【解决方案2】:

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

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

    【讨论】:

    • 现在已弃用。使用ClassName.aasm.states_for_select。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-17
          • 1970-01-01
          • 2010-11-19
          • 1970-01-01
          相关资源
          最近更新 更多