2017-03-20 6 views
1

私はできる限り最善の方法で説明しようとします。私はRoRにとってとても新しいです。APIクエリデータをRailsアプリに追加する

私はRuby on Railsアプリケーションを持っていますが、それはscaffoldingを使って作成したクラスとモデルは1つだけです。

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

モデルcountry.rbは空です:

class Country < ActiveRecord::Base 
 
end

今、私はAPIからクエリを作成し、コントローラは、それが次のコードを持ってcountries_controller.rbと呼ばれていますHTTPartyを使って、tを追加したいRailsアプリに:nameという結果が表示され、結果/国ごとにアプリ内に新しい行が追加されます。どこにコードを記述し、JSONをdb項目に変換するか私はJSON.parse(response)を試しましたが、それを理解できませんでした。

これが私のクエリです:

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

答えて

1

私は私はあなたがWebサービスを消費している.Whenあなたのコードがモデルになりますので、データベースにそれを保存する必要があなたのポイントを理解すると思います。

の表にの名前がのフィールドがあるとします。あなたはこの

def index 
    @countries = Country.all 
    end 

を行う際

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 

はその後、コントローラにそれはあなたのすべての国を与えるありがとう

+0

に名前を付けます!もう一つの問題。今すぐウェブサイトを読み込むたびに、同じ情報がデータベースに追加されます。これをどうすれば解決できますか? – Mustafa

+0

これは別の質問ですので、新しい質問として投稿してくださいが、私はここにそれに答えると主張する場合 –

+0

ありがとう!あなたの助けは本当に感謝しています! – Mustafa

関連する問題