2016-08-11 2 views
0

RoR4 приложение. У меня есть страница X, которая показывает информацию о ценах на веб-сайте электронной коммерции. Таким образом, существует контроллер ценообразования с индексной страницей, показывающей контент цены. Существует кнопка покупки, которую нужно сделать следующие вещи:Добавить новое действие к существующему контроллеру или добавить новое действие к новому контроллеру?

  1. Если нажата, проверьте, является ли пользователь проверку подлинности
  2. Если проверка подлинности, принимать их к услугам третьих лиц для получения информации по кредитной карте
  3. При успешной покупке, перенаправить поток обратно на исходный сайт электронной коммерции

Моя дилемма: Должен ли я добавить новый контроллер покупки? или добавить новую покупку метода в существующий контроллер ценообразования.

+0

Я наклоняюсь к новому контроллеру –

ответ

1

Все зависит от того, хотите ли вы, чтобы ваше приложение было RESTful или нет. Даже если ваш контролер цен в настоящее время имеет только действие индекса, в будущем вам может понадобиться создать new/edit действия (чтобы добавить цены) и, следовательно, соответствующие действия create/update.

Конечно, если вы не хотите быть RESTful, вы можете добавить любые методы, которые вы хотите. Однако, я думаю, что это просто хорошая практика, чтобы следовать шаблону RESTful. Такой дизайн имеет четко определенную и признанную семантику, а также препятствует вам загромождать ваши контроллеры.

Так что, если вы решите пойти с контроллером покупки, я бы посоветовал вам сделать следующее:

  1. Используйте create действие в качестве цели для вашей кнопки покупки.
  2. На этом create действие добавьте фильтр before_action, который будет проверять подлинность.
  3. Здесь я не уверен, как именно выполняется ваш интерфейс с третьим лицом, но я предлагаю вам записать в вашу базу данных всю важную информацию о вашей транзакции/покупке с помощью какого-либо ключа и только затем выполнить свою стороннюю покупку вызов.
  4. При успешной или неудачной покупке вы можете попросить вашу стороннюю сторону перенаправить на действие update в контроллер покупки, где вы можете обновить свою запись с шага 3 с помощью возвращаемой информации (я предпочитаю сохранять весь ответ body), а затем в зависимости от статуса перенаправлять внутренне на вашу страницу ценообразования в случае успеха или на какую-то страницу обработки ошибок.

Я не говорю, что это единственно возможное решение. Однако из моего предыдущего опыта я узнал, что хранение подробного журнала транзакций в вашей собственной базе данных очень полезно для устранения проблем в будущем.

Итак, окончательный ответ - предпочесть отдельный контроллер над добавлением метода unRESTful, который точно не соответствует существующему контроллеру.

+0

спасибо, я продолжу это решение :) очень приятно объяснил. – user2452057

0

Я считаю, что хорошо иметь другой контроллер, потому что имя контроллера - это контролер цен, который, как я думаю, не очень беспокоит насчет платежей или транзакций.

как о наличии нового контроллера в качестве payments_controller.rb или transactions_controller.rb сам

название цен указывает на некоторые связанные вещи цены, где платежи или операции указывает название более близкое назначение функциональности.

Смежные вопросы