Все зависит от того, хотите ли вы, чтобы ваше приложение было RESTful или нет. Даже если ваш контролер цен в настоящее время имеет только действие индекса, в будущем вам может понадобиться создать new/edit
действия (чтобы добавить цены) и, следовательно, соответствующие действия create/update
.
Конечно, если вы не хотите быть RESTful, вы можете добавить любые методы, которые вы хотите. Однако, я думаю, что это просто хорошая практика, чтобы следовать шаблону RESTful. Такой дизайн имеет четко определенную и признанную семантику, а также препятствует вам загромождать ваши контроллеры.
Так что, если вы решите пойти с контроллером покупки, я бы посоветовал вам сделать следующее:
- Используйте
create
действие в качестве цели для вашей кнопки покупки.
- На этом
create
действие добавьте фильтр before_action
, который будет проверять подлинность.
- Здесь я не уверен, как именно выполняется ваш интерфейс с третьим лицом, но я предлагаю вам записать в вашу базу данных всю важную информацию о вашей транзакции/покупке с помощью какого-либо ключа и только затем выполнить свою стороннюю покупку вызов.
- При успешной или неудачной покупке вы можете попросить вашу стороннюю сторону перенаправить на действие
update
в контроллер покупки, где вы можете обновить свою запись с шага 3 с помощью возвращаемой информации (я предпочитаю сохранять весь ответ body), а затем в зависимости от статуса перенаправлять внутренне на вашу страницу ценообразования в случае успеха или на какую-то страницу обработки ошибок.
Я не говорю, что это единственно возможное решение. Однако из моего предыдущего опыта я узнал, что хранение подробного журнала транзакций в вашей собственной базе данных очень полезно для устранения проблем в будущем.
Итак, окончательный ответ - предпочесть отдельный контроллер над добавлением метода unRESTful, который точно не соответствует существующему контроллеру.
Я наклоняюсь к новому контроллеру –