2016-09-22 3 views
0

私は保留中の注文を受け取るために外部APIを使っています。保留中の注文をPostgreSQLに保存するGETリクエストメソッドを作成しました。Rails GETリクエストが以前にダウンロードしたデータをプルダウンする

問題は、各GETリクエスト中に、保留中のすべての注文(古いものと新しいもの)が再度ダウンロードされたために重複を作成しているという問題です。

私のGETリクエスト中に方法がありますか?以前にダウンロードした保留中の注文のデータベースをチェックして無視し、新しく作成された保留中の注文のみをダウンロードできますか?

REST宝石は、私が使用している:

残り、クライアント

をここに私の作業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 

答えて

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 
0

あなたも、リモートサーバのコントロールを持っていますか?以前に取り込んだことのないものだけを送るように更新できますか?そうでない場合は、日付X(最後に取得した日付)の後に作成された投稿のみを尋ねるのはどうですか?そうでない場合は、すべてをフェッチして、あなたのデータベースをチェックし、まだ新しいレコードを作成していない場合にのみ作成します(シーケンス番号はあなたのデータベースに既に入っていればユニークです)。

+0

私は別の方法を持っているPOST要求を送ることができます。重複した注文をダウンロードする必要はありません。これは、POSTリクエストが失敗した場合にのみ発生します。私のGETリクエストでは、JSONデータをデータベースに対してチェックし、すでに存在する場合はそれをスキップする安全性を追加したいと考えています。私は、シーケンス番号またはmessage_guidを使用することができます。 – bradbajuz

関連する問題