问题标签 [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.

0 投票
1 回答
29 浏览

ruby-on-rails - 状态机状态总是返回最后一个状态而不是初始状态

我正在尝试使用 aasmstate machine从一个state到另一个。但它issue是在没有调用的情况下statemachine通过所有的。states这是我正在使用的代码

在这里,如果我这样做Booking.create,它甚至最初都会返回checked_out状态而不是预期的pending

为什么它返回last预期状态而不是initial??

0 投票
1 回答
4189 浏览

ruby-on-rails - 在 AASM 中自动更改状态的最佳方法是什么

我一直在使用AASM在我当前的项目中制作状态机,并且想知道自动调用事件并进入下一个状态的最佳方式是什么?

我正在考虑两种方法:

  1. 设置后台作业以定期检查是否满足某些条件,因此调用事件以进入下一个状态。

  2. 调用before_save一个连续尝试下一个事件的方法。有一个守卫,如果条件满足就不会成功,否则,状态改变,下次模型更新时,我们检查一个新事件。

我倾向于第二个选项,因为设置一个 background_job 队列只是为了转换事件似乎有点矫枉过正。我找不到这方面的最佳实践,所以我很想知道最佳方法以及为什么会这样?

例子

例如我们有start_onboardingcomplete_onboarding事件。我不想手动调用这些事件,但我想在挂起 -> in_progress -> 已完成事件之间自动转换。

0 投票
3 回答
3877 浏览

ruby-on-rails - 轨道 AASM;如果发生特定转换,如何执行某些操作

我在 Rails 上使用称为AASM的状态机 gem 。

有一个事件有两种类型的转换。

三三种状态

pending可以改成paid past_due可以改成paid

所以在这里我只想在past_duego时做一些动作paid

任何的想法?

0 投票
1 回答
27 浏览

state-machine - aasm状态机def是否需要为模型类加载一次或多次?

对于具有 AASM 状态机的模型类,模型类中有如下定义:

我的问题是,aasmgem 是否会在每次需要时加载上面的 def。或者在模型类最初加载时只加载一次 def,并在会话的其余部分重复使用它。

0 投票
1 回答
230 浏览

ruby-on-rails - 添加aasm gem后,应用程序给我错误:参数数量错误(给定1,预期0)

我的模型:

和控制器:

尝试创建新潜在客户时,它给了我错误wrong number of arguments (given 1, expected 0)。这一切都是在我添加aasmgem 之后发生的。可能是什么原因?

0 投票
2 回答
849 浏览

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 installrails s甚至reboot是计算机。这是我的代码。

在此处输入图像描述

订单的要点在这里。

如何解决这个问题?如果我找不到正确的问题,或者您需要更多信息,您能指出来吗?

0 投票
0 回答
409 浏览

ruby-on-rails - 如果在 Rails 中没有实际触发事件而触发事件,是否有 AASM 方法来获取下一个状态

我正在尝试为AASM. 我有一个状态机,每个状态都有很多状态和很多事件。从AASM状态机定义中很难将机器可视化。为此,我想要以下三种方法,

1) 返回所有状态的方法。这已经由 提供AASM,即aasm.states.map(&:name)

2) 一种返回特定状态的所有事件的方法。AASM已经提供了一种从当前状态返回所有事件的方法,即aasm.events.map(&:name). 这几乎是我想要的,但我想将状态传递给方法。而不是使用当前状态,我想使用传递的状态。

3) 一种排除状态和事件的方法。该方法应在调用时返回下一个状态,而实际上不会更改状态机中的任何内容。像这样的东西,

有这样的东西吗?还有另一种方法来实现我想要的吗?

更新

基于@puneet18 的回答,我的状态图如下

我将如何生成这样的表格,其中包含适用于任何状态机的代码块,无论它有多复杂?

0 投票
1 回答
3215 浏览

ruby-on-rails - AASM 状态机异常处理示例?

我目前正在上课,基本上是在做以下事情:

  • 模型被创建
  • 获取数据(事件“get_things!”)
    • 如果发生异常,状态应该变为“失败”
    • 如果成功,状态应该是“完成”

我尝试按以下方式实现它:

它有效,但看起来不太好做......

我更喜欢自述文件中提到的错误处理

但我不知道这是否真的是这里的最佳做法?

我也有很多事件,它们的行为都应该像上面提到的错误处理一样,我看到我可以以某种方式使用 error_on_all_events - 但没有找到任何关于它的文档?

有什么想法吗?谢谢!

编辑:更改了一些小部分以消除混乱。

0 投票
1 回答
1791 浏览

ruby-on-rails - 将参数传递给 aasm 事件

我正在使用aasm状态机。我有以下事件。这样做是将状态从 更改order_createdpayment_response_received。所以在改变这个之后我想调用一个方法verify_payment_response(data)。我可以通过调用来改变这种状态@booking.move_to_payment_response_received!,但是如何传递参数以在 after 回调中使用?

0 投票
2 回答
574 浏览

ruby-on-rails - 在多个条件下有效地获取记录

aasm statemachine用于模型Booking

状态机有以下状态

因此,要根据我可以调用的状态获取预订booking.payment_authorized。但我要寻找的是所有带有状态payment_authorizedpayment_captured.

这可行 booking.payment_authorized + booking.payment_captured,但这是在进行 2 次数据库调用。一个用于查找authorized_state,另一个用于captured_state. 我怎样才能更有效地做到这一点(一次通话)?

谢谢