Ruby on rails Rails HttpParty JSON到要保存的参数

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:

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:\/\/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