问题标签 [aasm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 状态机状态总是返回最后一个状态而不是初始状态
我正在尝试使用 aasmstate machine
从一个state
到另一个。但它issue
是在没有调用的情况下statemachine
通过所有的。states
这是我正在使用的代码
在这里,如果我这样做Booking.create
,它甚至最初都会返回checked_out
状态而不是预期的pending
为什么它返回last
预期状态而不是initial
??
ruby-on-rails - 在 AASM 中自动更改状态的最佳方法是什么
我一直在使用AASM在我当前的项目中制作状态机,并且想知道自动调用事件并进入下一个状态的最佳方式是什么?
我正在考虑两种方法:
设置后台作业以定期检查是否满足某些条件,因此调用事件以进入下一个状态。
调用
before_save
一个连续尝试下一个事件的方法。有一个守卫,如果条件满足就不会成功,否则,状态改变,下次模型更新时,我们检查一个新事件。
我倾向于第二个选项,因为设置一个 background_job 队列只是为了转换事件似乎有点矫枉过正。我找不到这方面的最佳实践,所以我很想知道最佳方法以及为什么会这样?
例子
例如我们有start_onboarding
和complete_onboarding
事件。我不想手动调用这些事件,但我想在挂起 -> in_progress -> 已完成事件之间自动转换。
ruby-on-rails - 轨道 AASM;如果发生特定转换,如何执行某些操作
我在 Rails 上使用称为AASM的状态机 gem 。
有一个事件有两种类型的转换。
三三种状态
pending
可以改成paid
past_due
可以改成paid
所以在这里我只想在past_due
go时做一些动作paid
。
任何的想法?
state-machine - aasm状态机def是否需要为模型类加载一次或多次?
对于具有 AASM 状态机的模型类,模型类中有如下定义:
我的问题是,aasm
gem 是否会在每次需要时加载上面的 def。或者在模型类最初加载时只加载一次 def,并在会话的其余部分重复使用它。
ruby-on-rails - 添加aasm gem后,应用程序给我错误:参数数量错误(给定1,预期0)
我的模型:
和控制器:
尝试创建新潜在客户时,它给了我错误wrong number of arguments (given 1, expected 0)
。这一切都是在我添加aasm
gem 之后发生的。可能是什么原因?
ruby-on-rails - NameError: 未初始化的常量 Order::AASM
我正在用 AASM 实现一个订单系统,但是当我rails c
用来检查功能时,却发生了一些错误。NameError: uninitialized constant Order::AASM
Gemfile中有gem 'aasm'
。我已经用 搜索了 Google 和 StackOverflow NameError: uninitialized constant Order::AASM
,但没有任何效果。
我已经重新加载bundle install
,rails s
甚至reboot
是计算机。这是我的代码。
如何解决这个问题?如果我找不到正确的问题,或者您需要更多信息,您能指出来吗?
ruby-on-rails - 如果在 Rails 中没有实际触发事件而触发事件,是否有 AASM 方法来获取下一个状态
我正在尝试为AASM
. 我有一个状态机,每个状态都有很多状态和很多事件。从AASM
状态机定义中很难将机器可视化。为此,我想要以下三种方法,
1) 返回所有状态的方法。这已经由 提供AASM
,即aasm.states.map(&:name)
2) 一种返回特定状态的所有事件的方法。AASM
已经提供了一种从当前状态返回所有事件的方法,即aasm.events.map(&:name)
. 这几乎是我想要的,但我想将状态传递给方法。而不是使用当前状态,我想使用传递的状态。
3) 一种排除状态和事件的方法。该方法应在调用时返回下一个状态,而实际上不会更改状态机中的任何内容。像这样的东西,
有这样的东西吗?还有另一种方法来实现我想要的吗?
更新
基于@puneet18 的回答,我的状态图如下
我将如何生成这样的表格,其中包含适用于任何状态机的代码块,无论它有多复杂?
ruby-on-rails - AASM 状态机异常处理示例?
我目前正在上课,基本上是在做以下事情:
- 模型被创建
- 获取数据(事件“get_things!”)
- 如果发生异常,状态应该变为“失败”
- 如果成功,状态应该是“完成”
我尝试按以下方式实现它:
它有效,但看起来不太好做......
我更喜欢自述文件中提到的错误处理
但我不知道这是否真的是这里的最佳做法?
我也有很多事件,它们的行为都应该像上面提到的错误处理一样,我看到我可以以某种方式使用 error_on_all_events - 但没有找到任何关于它的文档?
有什么想法吗?谢谢!
编辑:更改了一些小部分以消除混乱。
ruby-on-rails - 将参数传递给 aasm 事件
我正在使用aasm状态机。我有以下事件。这样做是将状态从 更改order_created
为payment_response_received
。所以在改变这个之后我想调用一个方法verify_payment_response(data)
。我可以通过调用来改变这种状态@booking.move_to_payment_response_received!
,但是如何传递参数以在 after 回调中使用?
ruby-on-rails - 在多个条件下有效地获取记录
aasm
statemachine
用于模型Booking
。
状态机有以下状态
因此,要根据我可以调用的状态获取预订booking.payment_authorized
。但我要寻找的是所有带有状态payment_authorized
和payment_captured
.
这可行 booking.payment_authorized + booking.payment_captured
,但这是在进行 2 次数据库调用。一个用于查找authorized_state
,另一个用于captured_state
. 我怎样才能更有效地做到这一点(一次通话)?
谢谢