用途:在 Rails 应用中用 AASM 实现状态机,管理工作流状态。
安装:在 Gemfile 中加入 gem "aasm", "~> 5.5"。
主要能力:定义状态与事件;用 transitions 描述允许的状态迁移;使用 guard 守卫控制是否允许转换;提供 before/after 事件回调、before_enter/after_enter 与 before_exit/after_exit 状态回调;自动生成状态查询方法(如 pending?、paid?)、事件可用性判断(may_pay?)、执行方法(pay! 与 pay)以及按状态查询的 scope(如 Order.pending)。回调执行顺序为:before(事件)、before_exit(旧状态)、before_enter(新状态)、持久化、after_exit(旧状态)、after_enter(新状态)、after(事件)。支持一个事件配置多条 transitions,首个满足 guard 的规则生效。
使用方式:在模型中 include AASM,用 aasm column: :status do ... end 定义状态和事件;调用 pay! 执行转换并触发回调,pay 在失败时返回 false,pay! 在守卫不通过时抛出 AASM::InvalidTransition。可用 may_pay? 先行判断。
测试:资料给出 RSpec 示例,验证初始状态、状态迁移、邮件回调以及非法转换抛错。
限制:资料仅说明 AASM 与 Rails 基础用法;多状态机、持久化选项与历史记录需查阅 references/aasm-patterns.md,相关内容暂未提供。适用场景为需要显式状态流转与回调的业务流程。