On Nov 8, 2006, at 12:52 PM, Michael Guterl wrote: > Anyone have any suggestions on pushing a flat CSV file into a > relational db? I am currently thinking of a solution working with > FasterCSV and ActiveRecord. I picture something like the following, > although I'm sure someone can make a better suggestion... > > FasterCSV.read("data.csv", :headers => true).each do |row| > Product.create( > :name => row["Product Name"], > :category => Category.find_or_create_by_name(row["Product > Category"]), > :shipping_category => > ShippingCategory.find_or_create_by_weight(row["Weight"]), > :color => row["Product Color"], > :description => row["Product Description"] > ) > end > > My Product.create method call is HUGE, it keeps going and going... > > Any suggestions? I have the following example in FasterCSV's example directory: #!/usr/local/bin/ruby -w # csv_rails_import.task # # Created by James Edward Gray II on 2006-11-05. # Copyright 2006 Gray Productions. All rights reserved. namespace :my_app_name do desc "Injects purchase.csv into the database." task :load_purchase => [:environment] do require "#{RAILS_ROOT}/vendor/faster_csv/lib/faster_csv" purchase = Purchase.create! FCSV.foreach( "#{RAILS_ROOT}/db/questions.csv", :headers => true, :header_converters => :symbol ) do |line| purchase.line_items.create!(line.to_hash) end end end You're needs are slightly more complex, but this makes a decent starting point: 1. Use :header_converters where you can 2. Hash the line 3. Edit the Hash as needed to create associated objects 4. Hand-off to create Hope that helps. James Edward Gray II