Я еще не использовал его, поэтому не могу дать много понимания, но я бы посмотрел на ActiveMerchant , если вы еще этого не сделали.Я не уверен, какой сейчас ваш платежный шлюз, но если вы им не пользуетесь;Вы можете получить несколько идей.
РЕДАКТИРОВАТЬ Я понимаю, что это не ответило на вопрос, я просто думал, что это может дать вам некоторые идеи, если вы еще не использовали его.
У меня нет непосредственного опыта в обработке платежей, поэтому вы можете высказать свое мнение с большой долей соли.
Мое большое внимание при использовании методов жизненного циклав этом случае вам может понадобиться добавить дополнительную логику в ваш метод transfer_funds
в этом случае, который вам может и не понадобиться.Например, если Purchase
может быть обновлено позднее, вы будете вызывать свой метод transfer_funds
каждый раз, когда он обновляется.
Я не уверен, что Purchase
имеет концепцию предварительной авторизации, за которой следует фактический заряд, но я думаю, что transfer_funds
следует вызывать только один раз?Вы можете вместо этого переместить это в before_create
, но это может исправить только один этот сценарий.
Я также обнаружил, что перемещение их в методы жизненного цикла часто может добавить в вашу модель гораздо больше логики, чем хотелось бы.В прошлом я обнаружил, что более явное действие контроллера может иногда избавить меня от головной боли в будущем, даже если это добавит мне шаг, чтобы я мог выполнить, например, все, что мне нужно, transfer_funds
.
Теперь я пытаюсь сохранить свои методы жизненного цикла в классе модели, связанные только с обновлением самой модели ActiveRecord
и не делая дополнительной работы.Если хранить его в вашем контроллере невозможно, я бы подумал об использовании ActiveRecord :: Observer , чтобы абстрагировать логику, связанную с transfer_funds
.
Надеюсь, это даст вам некоторые идеи.