Rails Httparty JSON to params to save

时间:2017-09-08 00:05:13

标签: ruby-on-rails json parameters httparty

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。

1 个答案:

答案 0 :(得分:0)

你的response.body中已经有一个哈希值。您现在需要做的就是为模型的属性分配相关的键值。例如

clrate = ClRate.new
res = response.body
clate.time = res["timestamp"] 
...
clate.save