From: John Mcleod Date: 2010-02-13T05:17:31+09:00 Subject: Skipping headers in FasterCSV Hello all, I'm having one heck of a day. I found out that Oracle has a identifier limit and I have several columns that have a names longer than 30 chars. What does this have to do with FasterCSV you ask? I have a method in a controller that parses a .csv then writes to a database table. - controller - def import_irb_file # set file name file = params[:irb][:file] rowcount = 0 Irb.transaction do FasterCSV.parse(file, :headers => true, :header_converters => lambda { |h| h.tr(" ", "_").delete("^a-zA-Z0-9_")}, :converters => :all ) do |row| Irb.create( {"reconciled" => 0, "non_related" => 0 }.merge(row.to_hash)) rowcount += 1 end end # if successful then display, then redirect to index page flash[:notice] = "Successfully added #{rowcount} IRB record(s)." redirect_to :action => :index rescue => exception file_name = params[:irb]['file'].original_filename file_parts = params[:irb]['file'].original_filename.split('.') ext = file_parts[1] if ext != 'csv' error = "CSV file is required" else error = ERB::Util.h(exception.to_s) # get the error and HTML escape it end # If an exception in thrown, the transaction rolls back and we end up in this # rescue block flash[:error] = "Error adding projects to IRB table. (#{error}). Please try again." redirect_to :controller => 'irbs', :action => 'new' end If I rename several table columns, how can I skip reading the headers in the .csv then write to the columns correctly. I read a post that ":headers => true", allows reading the headers but does not return them. That's something I can use. But when I edit my csv portion to... Irb.transaction do FasterCSV.parse(file, :headers => true) do |row| Irb.create( {"reconciled" => 0, "non_related" => 0 }.merge(row.to_hash)) rowcount += 1 end end I get an "Error adding projects to IRB table. (unknown attribute: Q.1B PI8 Last). Please try again." error. Thank you for any help with this. JohnM -- Posted via http://www.ruby-forum.com/.