问题描述
所以我第一次使用 aasm gem 并模拟信用卡交易。
初始状态为“待处理”,我需要一个回调,在创建交易后立即检查交易金额是否大于限制。如果较低,则从挂起转换为已支付,如果不是,则从挂起转换为失败。
转换时使用 after_transaction 回调对吗?在这里行不通。我需要一个回调,在创建对象后立即调用方法“approve_transaction”。
aasm :column_name,column: 'status' do # default column: aasm_state
state :pending,initial: true
state :paid,:Failed
after
event :fail do
transitions from: :pending,to: :Failed
end
event :approve do
transitions from: :pending,to: :paid
end
def approve_transaction
if limit_left
approve
else
fail
end
end
def limit_left
remaining_limit = self.credit_card.limit - self.amount
remaining_limit >= 0 ? true : false
end
解决方法
我会尝试使用活动记录回调(例如,after_create
)来调用 approve_transaction