gem aasm TODO # 状态机 默认使用的是aasm_state 想要制定状态列名,使用aasm :state # State Machine aasm column: "state", requires_new_transaction: false,whiny_transitions: true, whiny_persistence: true, requires_lock: true do state :pending, initial: true # 已创建疑点,尚未申请 state :applied # 已申请 state :submitted # 已提交(待审批)(由疑点申请人提交) state :confirmed # 部门领导已确认疑点,待疑点逐步审批(由部门审核人发起) state :canceled # 已取消(可由申请人或部门审核人取消,需填取消理由) state :auditing # 审批中 state :rejected # 审批驳回 state :approved # 审批已通过 state :completed # 已完成 state :finished # 已落实 # 跟踪疑点状态变化 每次操作后会网approval中添加状态改变记录, after_all_transitions :save_approval # 提交申请 # 调用 @problem.apply 不更改数据库中字段值,apply!会更改数据库字段值 event :apply do transitions from: :pending, to: :applied end # 提交审批(已申请,或者驳回) # TODO 提交前验证信息 if: ->{valid?(:submit)} event :owner_submited do transitions from: [:applied,:rejected], to: :submitted end # 部门领导确认疑点,待疑点逐步审批(由部门审核人发起) event :confirm, after_commit: ->{ deliver!} do transitions from: :submitted, to: :confirmed end # 可由申请人或部门审核人取消 event :cancel do transitions from: [:submitted, :pending, :rejected], to: :canceled, # TODO: 删除疑点相关附件信息 after: [:delete_accessories] end # 审批中 event :auditing do transitions from: [:confirmed, :rejected], to: :auditing transitions from: :confirmed, to: :auditing end # 审核驳回 event :rejected do transitions from: :auditing, to: :rejected end # 完成疑点审批 event :complete do transitions from: [:auditing,:rejected] ,to: :completed end # 落实疑点 event :finished do transitions from: :complete ,to: :finished end end # 获取当前时间转化点 # state_names = aasm.states.map(&:name) %w(confirmed canceled auditing completed finished).each do |state| define_method("#{state}_at") do self.approvals.where(to_state: state).first.try(:created_at) end end # 获取当前审批状态 # 调用方法state_has_{state} %w(submitted confirmed canceled auditing completed finished).each do |state| define_method("state_has_#{state}?") do self.approvals.where(to_state: state).first.present? end end def approval_aply_only? approvals.where( to_state: :applied).size == 0 end 如果想更改数据库中的状态内容需要使用event!
Gem aasm
最新推荐文章于 2024-09-13 07:51:56 发布
本文介绍了一个基于状态机的状态管理流程,包括从待审批到完成的各个阶段,以及每个事件触发的状态转换逻辑。还介绍了如何记录状态变更及审批过程。
21万+

被折叠的 条评论
为什么被折叠?



