Как мне организовать поток этого кода Rails?

Я использую Shippinglogic для сбора информации для отслеживания отправленных номеров отслеживания.

Я занимаюсь рядом вещей за кулисами пользовательского интерфейса, но не уверен, как это правильно организовать.

Итак, вот поток:

  1. Пользователь отправляет номер отслеживания либо через ввод формы, либо через URL-адрес (example.com/track/1234567890). Если номер еще не существует в базе данных, происходит следующий шаг ...
  2. После того, как номер отправлен, я проверяю его с помощью некоторой логики, чтобы определить, кто является перевозчиком (UPS, FedEx, USPS, DHL и т. Д.). Пользователь никогда не указывает ... все это делается автоматически.
  3. После определения перевозчика мне нужно сделать фактический вызов API перевозчика (через Shippinglogic), чтобы получить информацию для отслеживания.
  4. После того, как я получу данные отслеживания, мне нужно сохранить их в базе данных.
  5. Затем данные отслеживания, наконец, возвращаются пользователю.

Поскольку пользователи могут отправлять либо через форму, либо через URL-адрес (без каких-либо действий POST), я пытаюсь запустить все это через свой show метод в контроллере, где я проверяю, существует ли номер, а если нет, отправляю его через Number.create(:tracking_number => '1234567890') но как только я попадаю в модель, я просто теряюсь в том, что делать дальше.


person Shpigford    schedule 18.08.2011    source источник


Ответы (1)


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

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

В основном, если необходимо использовать данные из записи или сохранить некоторые данные как часть записи, я сделал функцию в модели. Это позволило мне отделить кучу функций от конкретных модификаций действий контроллера и тому подобного.

person Devin M    schedule 18.08.2011
comment
В основном это то, что я уже делаю. Я спрашиваю, как обрабатывать (или где размещать) методы определения типа оператора связи, выполнения вызовов API и т. Д. - person Shpigford; 18.08.2011