2017-09-08 4 views
-1

Rails 4.5 Rubin 2.3.1Rails Httparty JSON params

Ich erhalte json von einem API zu speichern und versuchen, die folgenden in ein Modell CLrates 1. Zeitstempel als Unix-Zeit zu speichern (Datum) 2. Currency_code (string) 3. quote (dezimal monetär)

Ich kann das folgende in irb nach dem Parsen der JSON und wissen, wie man die Elemente einzeln mit Hilfe von: Antwort ["Anführungszeichen"]. Wie kann ich generieren params im Modell oben gespeichert werden, wenn der Körper ist wie folgt:

irb(main):036:0> puts response.body 
{ 
"success":true, 
"terms":"https:\/\/xxxxx.com\/terms", 
"privacy":"https:\/\/xxxxx.com\/privacy", 
"timestamp":1504817289, 
"source":"USD", 
"quotes":{ 
    "USDAED":3.672703, 
    "USDAFN":68.360001, 
    "USDCUC":1, 
    "USDCUP":26.5, 
    "USDCVE":91.699997, 
    "USDCZK":21.718701, 
    ............ many more lines removed for brevity 
    "USDZWL":322.355011 
} 

ich dies mit einem separaten zugehörigen Modell tun können, aber nur sehr wenig Ahnung, wie die params zu schaffen, um einen einzigen zu speichern Tabelle.

Die folgenden Links haben mich zu diesem Punkt und es lohnt sich eine lesen, wenn Sie Informationen benötigen auf httparty GET (Client): 1. http://www.rubydoc.info/github/jnunemaker/httparty/HTTParty/ 2. http://eric-price.net/blog/rails-api-wrapper/ 3. https://www.driftingruby.com/episodes/playing-with-json

Die Klasse und Methode in lib /clayer.rb:

class clayer 
    include HTTParty 
    format :json 
    read_timeout 10 

    def self.get_quotes 
    response = HTTParty.get('http://www.nnnnnnn.net/api/live? 
    access_key=nnnnnnnnnn&format=1') 
    end 
end 

I verwendet irb wie ich bin immer noch lernen, wie man diese c durch Schienen laufen. Dies wird in der Steuerung aufgerufen und gespeichert werden jedoch müssen herausfinden, wie die params vom json bekommen

Danke für die Hilfe

OK: Nach dem Graben Ich glaube, ich bin auf dem richtigen Weg ich das bekommen Reaktion [ „ZITATE“], loop durch sie und bauen die params erforderlich, um jeden am Ende der Schleife Spar

rates = response["QUOTES"] 
rates.each do |k,v| 
    clrate = Realtimerates.new 
    clrate.date = response["timestamp"] 
    clrate.countrycode = "#{k}" 
    clrate.price = "#{v}" 
    clrate.save 
end 

dies ein whirl

zu geben gehenden

In Modell

class Realtimerate < ActiveRecord::Base 

include HTTParty 
format :json 
read_timeout 5 


def self.get_cl_rates 
    response = HTTParty.get('http://www.mmmmm.net/api/live?access_key="key"&format=1') 
    rates = response["quotes"] 
    rates.each do |k,v| 
     create!(
     date: Time.at(response["timestamp"]), 
     country_code: "#{k}", 
     price: "#{v}") 

    end 

end 

end 

In der Steuerung:

def index 
    Realtimerate.get_cl_rates 
    @realtimerates = Realtimerate.all 
end 

Dies funktioniert und zeigt neueste GET.

Antwort

0

Sie haben bereits einen Hash in Ihrer Antwort.body. Sie müssen lediglich den relevanten Schlüsselwert den Attributen Ihres Modells zuweisen. z.B.

clrate = ClRate.new 
res = response.body 
clate.time = res["timestamp"] 
... 
clate.save 
+0

Also brauche ich ein Modell der Schlüssel: USDAED, USDAFN, USDCUC, USDCUP ... – giarcnappel

+0

Vielen Dank für die Antwort (punny nicht wahr). Also brauche ich ein Modell der Schlüssel: USDAED, USDAFN, USDCUC, USDCUP ... Dann durchschlinge jedes Element und baue den params-Hash. Gibt es eine Möglichkeit, dies zu tun, ohne den Schlüssel zu kennen und ein zusätzliches Modell hinzuzufügen? Ich verstehe, wie man auf sie wie folgt zugreift und verwendet Ihre Methode, die zum Konstruieren geschrieben wurde: response ["quotes"] ["USDAED"]. Das gibt mir den Preis: Gibt es eine Möglichkeit, den Schlüssel symbolisch zu referenzieren? – giarcnappel

+0

Hallo, Ihr letzter Versuch ist auf dem richtigen Weg, aber wird nur den letzten Währungscode, Wertpaar erfassen. Eine Lösung besteht darin, jedes Paar in einem Objekt zu speichern, andernfalls benötigen Sie für jeden Währungscode ein Feld. – EJ2015