Rails 4.5 Ruby 2.3.1Rails Httparty JSON params pour sauver
Je reçois JSON d'une API et d'essayer de stocker les éléments suivants dans un modèle CLrates 1. horodatage en temps unix (date) 2. Currency_code (string) 3. quote (valeur monétaire décimale)
Je peux utiliser ce qui suit dans irb après avoir analysé json et savoir comment obtenir les éléments individuellement en utilisant: response ["quotes"]. Comment puis-je générer params être enregistré dans le modèle ci-dessus lorsque le corps est la suivante:
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
}
je peux le faire en utilisant un modèle associé distinct, mais très peu idée de créer les params pour sauver un seul table.
Les liens suivants me sont arrivés là et mérite une lecture si vous avez besoin d'informations sur 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
La classe et la méthode dans 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
J'utilisé RIR je suis encore à apprendre comment gérer cela par rails c. Ce sera appelé dans le contrôleur et enregistré doivent toutefois travailler sur la façon d'obtenir les params du JSON
Merci pour l'aide
OK: après avoir creusé Je pense que je suis sur la bonne voie je reçois la réponse [ « CITATIONS »], boucle à travers eux et construire les params nécessaires sauver chacun à la fin de la boucle
rates = response["QUOTES"]
rates.each do |k,v|
clrate = Realtimerates.new
clrate.date = response["timestamp"]
clrate.countrycode = "#{k}"
clrate.price = "#{v}"
clrate.save
end
va donner ce un tourbillon
Dans le modèle
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
Dans le contrôleur:
def index
Realtimerate.get_cl_rates
@realtimerates = Realtimerate.all
end
Cela fonctionne et montre le dernier GET.
donc j'ai besoin d'un modèle des clés: USDAED, USDAFN, USDCUC, USDCUP ... – giarcnappel
Merci pour la réponse (punny isnt il). J'ai donc besoin d'un modèle de clés: USDAED, USDAFN, USDCUC, USDCUP ... Ensuite, bouclez chaque élément et construisez le hachage des params. Y at-il un moyen de le faire sans connaître la clé et en ajoutant un modèle supplémentaire? Je comprends comment y accéder comme suit et utilisera votre méthode postée pour construire: response ["quotes"] ["USDAED"]. Cela me donne le prix: existe-t-il un moyen de référencer symboliquement la clé? – giarcnappel
Salut votre dernière tentative est sur la bonne voie, mais ne capturera que le dernier code de devise, la paire de valeur. Une solution consiste à enregistrer chaque paire dans un objet, sinon vous avez besoin d'un champ pour chaque code de devise. – EJ2015