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 が更新されない理由を知っている人はいますか?