Rails请求下拉以前下载的数据

时间:2016-09-22 19:15:16

标签: ruby-on-rails postgresql rest get rest-client

我正在使用外部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

2 个答案:

答案 0 :(得分:0)

您是否也可以控制远程服务器?你可以更新它只发送你以前没有拿过的东西吗?如果没有,那么如何仅询问在日期X之后创建的帖子(这是您上次获取的日期)?如果没有,那么获取它们全部,只检查你的数据库并且只创建一个新的记录,如果你还没有(序列号是唯一的吗?如果序列号已经在你的数据库中,那么跳过那一行)

答案 1 :(得分:0)

我想出来了。这是我更新的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