Почему мой Spree:: Обновление записи пользователя?

Я запустил новый проект на 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 не обновляется?

1 ответ

Трудно сказать, не видя ваших логов, но я предполагаю, что вы не занесли в белый список кредитные параметры. Если это так, вы можете добавить это в initializers/spree.rb

Spree::PermittedAttributes.user_attributes << :credit

Если нет, не могли бы вы опубликовать свой журнал сервера для действия обновления?

Другие вопросы по тегам