我在Spree 3.0.1上开始了一个新项目,我必须实现一个礼品卡系统,该系统在领取礼品卡时将一定数量的商店信用绑定到用户。鉴于从 3.0.1 版开始,尚未实现商店积分功能,我正在尝试自己实现一个简单的系统。
我进行了迁移以向Spree::User添加一列,指示他们拥有的商店信用额度。还添加了结帐流程的新步骤,用户可以选择使用部分或全部可用的商店积分。此步骤生成价格调整,降低订单价格。还在Spree::Order上创建了一个字段来存储有多少商店信用用于交易。
到目前为止,这已经完成,没有太多麻烦。当我试图更新用户留下的信用时,真正的麻烦就来了。我的 order_decorator.rb 中有这段代码
Spree::Order.state_machine.after_transition to: :complete, do: :update_user_credit
def update_user_credit
credit_used = self.credit_used
initial_credit = self.user.credit
self.user.update(credit: initial_credit - credit_used)
end
为了更新商店信用,我在订单完成后运行回调,更新用户的信用。由于某种原因,这条指令永远不会执行。
从控制台更新用户信用已完成。用户可以从回调中访问,因为我已经使用信用进行了一些验证。
任何人都知道为什么 Spree::User.credit 没有更新?