Другой метод - захватывать только новые из Shopify записи. Например, если вы синхронизируете продукты, а последний идентификатор продукта, который вы извлекли из магазина Shopify, равен 12345
, то вы можете просто нажать API для всех продуктов с идентификатором, превышающим 12345
:
products = ShopifyAPI::Product.all(params: {since_id: 12345})
Или вы можете записать, когда вы в последний раз синхронизировали свои продукты, например, в поле products_last_synced_at
. Вы можете нажать API Shopify для записей, которые были обновлены с момента последней синхронизации:
products = ShopifyAPI::Product.all(params: {updated_at_min: shop.products_last_synced_at})
Наконец, я бы использовал что-то вроде Product.find_or_create_by_product_id(12345)
при обновлении базы данных ваших приложений и использовании id
, который приходит из Shopify, в качестве атрибута product_id
вашей локальной Product
модели. Это будет гарантировать, что каждый раз, когда вы синхронизируете свои заказы, вы обновляете уже синхронизированные и добавляете те, которые не синхронизировали.
Конечно, не забудьте проиндексировать столбец product_id
вашей таблицы products
, добавив в вашу миграцию следующее:
add_index :products, :product_id, unique: true
Этот индекс гарантирует, что вы не сможете создавать записи продукта с дублирующимися значениями product_id
. При необходимости в некоторых странных случаях вы всегда можете спасти от ошибок ActiveRecord::RecordNotUnique
и обработать их.