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 gehendenIn 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.
Also brauche ich ein Modell der Schlüssel: USDAED, USDAFN, USDCUC, USDCUP ... – giarcnappel
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
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