Rails GET 请求拉下之前下载的数据

Rails GET request pulling down previously downloaded data

我正在使用外部 API 来接收挂单。我已经成功编写了一个 GET 请求方法,可以将任何挂起的订单保存到 PostgreSQL。

我遇到的问题是,在每次 GET 请求期间,我都会创建副本,因为它会再次下载所有挂单(旧的和新的)。

有没有办法在我的 GET 请求期间,我可以检查数据库是否有以前下载的挂单,忽略它们,只下载新创建的挂单?

REST Gem 我正在使用:

休息客户端

这是我的工作 GET 请求:

def download_pf_orders
  download_count = 0
  uri = "#{PF_TEST_PENDING_API_URL}"
  rest_resource = RestClient::Resource.new(uri, PF_TEST_USERNAME, PF_TEST_PASSWORD)

  begin
    response = rest_resource.get(accept: 'application/json')
    json = JSON.parse(response)

    json.each do |data|

      sequence = data['SequenceNumber']
      puts "### Last Sequence Number: #{sequence}"

      PfOrder.create(
        sequence_number: data['SequenceNumber'],
        message_guid: data['MessageGuid'],
        hl7_document: data['Hl7Document']
        )
      download_count += 1
    end
  rescue => e
    puts "### Status Code: #{e.response.code} ###"
  end
  puts "### Downloaded Orders: #{download_count} ###"
end

你也有远程服务器的控制权吗?您可以将其更新为仅向您发送您之前未获取过的内容吗?如果不是,那么只请求在日期 X(这是您上次获取的日期)之后创建的帖子怎么样?如果没有,则将它们全部获取,然后检查您的数据库,如果您还没有创建一个新记录(序列号是唯一的,对吗?如果序列号已经在您的数据库中,则跳过该行)。

我想通了。这是我更新的 GET 方法:

def download_pf_orders
  download_count = 0
  uri = "#{PF_TEST_PENDING_API_URL}"
  rest_resource = RestClient::Resource.new(uri, PF_TEST_USERNAME, PF_TEST_PASSWORD)

  begin
    response = rest_resource.get(accept: 'application/json')
    json = JSON.parse(response)

    json.each do |data|

      sequence = data['SequenceNumber']
      puts "### Last Sequence Number: #{sequence}"

      pending_order = PfOrder.new(
        sequence_number: data['SequenceNumber'],
        message_guid: data['MessageGuid'],
        hl7_document: data['Hl7Document'],
        )

      sn = pending_order.sequence_number
      mg = pending_order.message_guid
      hd = pending_order.hl7_document

      PfOrder.find_or_create_by(sequence_number: sn, message_guid: mg, hl7_document: hd)

      download_count += 1
    end
  rescue => e
    puts "### Status Code: #{e.response.code} ###"
  end
  puts "### Downloaded Orders: #{download_count} ###"
end