Ruby on rails Rails HttpParty JSON到要保存的参数
Rails 4.5 Ruby 2.3.1 我从API获取json,并尝试将以下内容存储到模型中 1.时间戳为unix时间(日期) 2.货币代码(字符串) 3.报价(十进制货币价值) 在解析json之后,我可以在irb中使用以下内容,并知道如何使用:response[“quotes”]单独获取元素。当主体如下所示时,如何生成要保存在上述模型中的参数:Ruby on rails Rails HttpParty JSON到要保存的参数,ruby-on-rails,json,parameters,httparty,Ruby On Rails,Json,Parameters,Httparty,Rails 4.5 Ruby 2.3.1 我从API获取json,并尝试将以下内容存储到模型中 1.时间戳为unix时间(日期) 2.货币代码(字符串) 3.报价(十进制货币价值) 在解析json之后,我可以在irb中使用以下内容,并知道如何使用:response[“quotes”]单独获取元素。当主体如下所示时,如何生成要保存在上述模型中的参数: irb(main):036:0> puts response.body { "success":true, "terms":"https:
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
}
我可以使用一个单独的关联模型来实现这一点,但我不知道如何创建参数以保存到单个表中
以下链接将我带到了这一点,如果您需要有关httparty GET(客户端)的信息,那么值得一读:
1.
2.
3.
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,因为我还在学习如何通过RailsC运行它。这将在控制器中调用并保存,但是需要确定如何从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
这正在工作并显示最新的GET。您的response.body中已经有一个哈希。现在需要做的就是将相关的键值指定给模型的属性。e、 g
clrate = ClRate.new
res = response.body
clate.time = res["timestamp"]
...
clate.save
谢谢你的回复(不是小意思)。所以我需要一个密钥模型:USDAED、USDAFN、USDCUC、USDCUP……然后循环遍历每个元素并构建参数散列。有没有一种方法可以在不知道钥匙的情况下添加额外的型号?我了解如何访问它们,如下所示,并将使用您发布的方法构建:响应[“报价”][“USDAED”]。这确实给了我一个代价:有没有办法象征性地引用密钥?您好,您最近的尝试是正确的,但只会捕获最后一个货币代码,即值对。一种解决方案是将每对货币保存在一个对象中,否则每个货币代码都需要一个字段。感谢堆栈的帮助。我已经通过索引操作使其工作,因此它将显示最新的GET:quity funky:lovn it。希望听到您对解决方案的意见。尤其是对象方法!可能比这好多了。另外:将该方法移动到模型中,并从控制器Realtimerates调用它。请见见editsGlad你成功了。但是如果只需要调用它的类方法,我认为不需要包含HTTParty。事实上,最好不要在这里混用,因为这样会导致界面混乱。
clrate = ClRate.new
res = response.body
clate.time = res["timestamp"]
...
clate.save