В моем приложении для bike_rental_shops
я даю возможность этим магазинам управлять прокатом велосипедов.
Контекст Компании по прокату велосипедов также предлагают свои велосипеды на веб-сайте внешних сторон, поэтому я подключаю свое приложение Rails к этим внешним веб-сайтам. В настоящее время я обрабатываю это в моем контроллере, когда пользователь переходит на страницу индекса. Перед загрузкой страницы индекса выполняется вызов API на внешний веб-сайт проката, и в базе данных должны быть сохранены новые прокаты велосипедов.
Вопрос Как сохранить только новые прокаты, а не все связанные прокаты на определенный внешний веб-сайт аренды?
Текущее рассмотрение Единственное, что я могу придумать, - это добавить столбец базы данных с {external_website}_rental_id
для указанного c внешнего веб-сайта, чтобы я мог сопоставить их. Однако это будет означать, что мне нужно добавить отдельный rental_id для каждого внешнего сайта аренды.
Код
rentals_controller.rb
def index
shop = Shop.find(params[:id])
request_rental_api
@bikes = shop.bikes
end
private
def request_rental_api
# set variables
base_url = "https://www.rentalwebsite.com"
url = "/rest/api/rentals"
token = 'TOKEN'
# init connection object
connection = Faraday.new(:url => base_url) do |c|
c.use Faraday::Request::UrlEncoded
c.use Faraday::Response::Logger
c.use FaradayMiddleware::FollowRedirects
c.adapter Faraday::Adapter::NetHttp
end
# send request
response = connection.get url do |request|
request.headers["Authorization"] = token
request.headers["Accept"] = "application/json"
end
bookings = JSON.parse(response.body['results'])
# check if rental is unique, and if so save it.
# Rental.create(????)
end
JSON API вывода
{
"next": null,
"previous": null,
"results": [
{
"activation_requested": false,
"id": 21664,
"slug": "rental-test"
#more information....
}
}]