rails6 APIから取得したデータでseedを実行する

rails6 APIから取得したデータでseedを実行する

rails6で、APIから取得したデータでseedを実行してデータを作成する手順を記述してます。railsのバージョンは6.1.0です。

環境

  • OS ubuntu20.10
  • ruby 2.7.2
  • rails 6.1.0
  • Postgresql 13.1 (dockerで構築)

APIデータ作成

Fakerとjson-serverで作成してます。

取得するAPIは、下図の構造となってます。

テーブル作成

ここでは「Customer」というモデルで「customers」テーブルを作成してます。

rails g model Customer name:string email:string
rails db:migrate

「customers」テーブル

seedファイル作成

「db」配下の「seed.rb」を以下のように編集します。

# 取得するAPI
uri = URI.parse("http://url or host:3001/users")

# APIリクエスト
json = Net::HTTP.get(uri)

# jsonから配列に変換
arr = JSON.parse(json)

# データ確認
puts arr

# データ作成
Customer.create!(
  arr
)

実行します。

rails db:seed

データが作成されていることが確認できます。

データを作成する箇所は、以下のようにしても同じです。

arr.each do |i|
  Customer.create!(
    { id: i["id"], name: i["name"], email: i["email"] }
  )
end

また、値が存在する場合は更新、ない場合は追加する場合は以下となります。

arr.each do |i|  
  if Customer.find_by(id: i["id"])
    id = Customer.find_by(id: i["id"])
    id.update!({ name: i["name"], email: i["email"] })
  else
    Customer.create!({ id: i["id"], name: i["name"], email: i["email"] })
  end
end