我成功地将最新的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似乎是正确的候选项,但我无法在订单模型中调用它。
有人能帮忙吗?
先谢了。
6条答案
按热度按时间ffdz8vbo1#
对于
3.0.18
版本,您可以使用ClassName.aasm.states
oug3syen2#
我不明白OrderFlow是如何与Order和Transitions一起工作的,但我认为您只是为了更好地解释您的场景而将其包括在内。
ClassName.aasm_states_for_select为您提供模型中声明的状态列表。
cig3rfwq3#
对于
3.1.1
中的events,我使用Model.aasm.events.keys
来获得一个事件名称符号数组,在最近的版本中,.map(&:name)
不会为您做这件事。lo8azlld4#
另外,虽然不是100%确定您要的是什么,但是如果您想要为您的模型声明所有的状态和事件,您可以通过分别调用Order.aasm_states和Order.aasm_events来获得它们。
inkz8wg95#
可以使用更优雅的Ruby语法,如下面IRB中的示例所示,您可以在一个符号数组中获得所有允许的状态。
=〉[:已创建,:已提交,:已拒绝,:已批准]
9gm1akwq6#
在5.4.0版本中,它现在看起来是一个数组,因此我们回到