Search code examples
ruby-on-railsrubyactiverecordruby-csv

How add date of csv on database


I have the file with the following content:

purchaser name  item description    item price  purchase count  merchant address    merchant name
João Silva  R$10 off R$20 of food   10.0    2   987 Fake St Bob's Pizza
Amy Pond    R$30 of awesome for R$10    10.0    5   456 Unreal Rd   Tom's Awesome Shop
Marty McFly R$20 Sneakers for R$5   5.0 1   123 Fake St Sneaker Store Emporium
Snake Plissken  R$20 Sneakers for R$5   5.0 4   123 Fake St Sneaker Store Emporium

I created the database this way:

enter image description here

I have the following code to get the data:

require 'csv'

CSV.foreach('myfile.txt', col_sep: "\t", headers: true).map do |row|
  row.to_h
end

I get the following hash when I squeeze it:

[{"purchaser name"=>"João Silva", "item description"=>"R$10 off R$20 of food", "item price"=>"10.0", "purchase count"=>"2", "merchant address"=>"987 Fake St", "merchant name"=>"Bob's Pizza"}, {"purchaser name"=>"Amy Pond", "item description"=>"R$30 of awesome for R$10", "item price"=>"10.0", "purchase count"=>"5", "merchant address"=>"456 Unreal Rd", "merchant name"=>"Tom's Awesome Shop"}, {"purchaser name"=>"Marty McFly", "item description"=>"R$20 Sneakers for R$5", "item price"=>"5.0", "purchase count"=>"1", "merchant address"=>"123 Fake St", "merchant name"=>"Sneaker Store Emporium"}, {"purchaser name"=>"Snake Plissken", "item description"=>"R$20 Sneakers for R$5", "item price"=>"5.0", "purchase count"=>"4", "merchant address"=>"123 Fake St", "merchant name"=>"Sneaker Store Emporium"}]

How do I put each item of this hash in its proper table in the database?


Solution

  • CSV.foreach('myfile.txt', col_sep: "\t", headers: true).map do |row|
      records = row.to_h
    
      # you can set the records as variables:
    
      purchaser = records["purchaser name"]
      item_description = records["item description"]
      item_price = records["item price"]
      purchase_count = records["purchase count"]
      merchant_address = records["merchant_address"]
      merchant_name = records["merchant name"]
    
      # now that you have the content as variables do you can whatever you want with them
      # Merchant.where(name: merchant_name), etc...
    
    end