Rails 4.5 Ruby 2.3.1
我从API获取json并尝试将以下内容存储到模型CLrates中 1.时间戳为unix时间(日期) 2. Currency_code(字符串) 3.报价(十进制货币值)
我可以在解析json之后在irb中使用以下内容,并知道如何使用:response [" quotes"]单独获取元素。如果正文如下,我怎样才能生成保存在上面模型中的参数:
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
}
我可以使用单独的关联模型来完成此操作,但很少知道如何创建params以保存到单个表中。
以下链接让我了解了这一点,如果您需要有关httparty GET(客户端)的信息,那么非常值得一读: 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
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
我使用irb,因为我还在学习如何通过rails c运行它。这将在控制器中调用并保存,但需要弄清楚如何从json中获取参数
感谢您的帮助
好的:挖完之后我觉得我走在了正确的轨道上 我得到了响应[" QUOTES"],循环遍历它们并构建所需的参数,在循环结束时保存每个参数
rates = response["QUOTES"]
rates.each do |k,v|
clrate = Realtimerates.new
clrate.date = response["timestamp"]
clrate.countrycode = "#{k}"
clrate.price = "#{v}"
clrate.save
end
要给它一个旋转
在模型中
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
在控制器中:
def index
Realtimerate.get_cl_rates
@realtimerates = Realtimerate.all
end
这是有效的,并显示最新的GET。
答案 0 :(得分:0)
你的response.body中已经有一个哈希值。您现在需要做的就是为模型的属性分配相关的键值。例如
clrate = ClRate.new
res = response.body
clate.time = res["timestamp"]
...
clate.save