我成功地将最新的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.答案 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)
不会为您做到这一点。