0

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

4

1 に答える 1

0

ログを確認せずに言うのは難しいですが、クレジット パラメータをホワイトリストに登録していないと思います。その場合は、これを initializers/spree.rb に追加できます

Spree::PermittedAttributes.user_attributes << :credit

そうでない場合は、更新アクションのサーバー ログを投稿していただけますか?

于 2015-07-16T20:02:30.637 に答える