将API查询数据添加到Rails应用程序

时间:2017-03-20 21:32:56

标签: ruby-on-rails ruby scaffolding

我会尝试以最好的方式解释它。我对RoR很新。

我有一个Ruby on Rails应用程序,它只有一个类和一个我使用scaffolding创建的模型。控制器名为countries_controller.rb,它具有以下代码:



class CountriesController < ApplicationController
  before_action :set_country, only: [:show, :edit, :update, :destroy]

  def index
    @countries = Country.all
  end

  def show
  end

  private

    def set_country
      @country = Country.find(params[:id])
    end

    def country_params
      params.require(:country).permit(:name)
    end

end
&#13;
&#13;
&#13;

模型country.rb为空:

&#13;
&#13;
class Country < ActiveRecord::Base
end
&#13;
&#13;
&#13;

现在我使用HTTParty从API创建了查询,并且我想将结果:name添加到Rails应用程序,以便每个结果/国家/地区将添加为应用程序中的新行。放置代码的位置,以及如何将JSON转换为db条目。我试过了JSON.parse(response),但无法弄清楚。

这是我的疑问:

&#13;
&#13;
require 'httparty'

response = HTTParty.get('http://api.population.io/1.0/countries/?format=json', format: :json)

countries = response["countries"]

countries.each do |c|
  puts c

end
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

我想我理解你的观点。当你使用网络服务时,你必须将其保存在数据库中,这样你的代码就会进入模型。

假设您有一个带有名称字段的国家/地区表。

class Country < ActiveRecord::Base
    require 'httparty'

    response = HTTParty.get('http://api.population.io/1.0/countries/?format=json', format: :json)

    countries = response["countries"]

    countries.each_with_index do |country|
      country = self.find_by(name: country[i])
        if country == nil
          self.create!(name: country[i])
        end
    end
end

然后在控制器中执行此操作

 def index
    @countries = Country.all
  end

它将为您提供所有国家/地区名称