Hello all, I''m using Ruby 1.8.6 and Rails 2.3.3. I''m new at Rails so bear with me, please. My application reads in a csv file to a staging (imports) table then compares the contents of the table to a main (projects) table. Then imports all non-repetitive rows to the main table. This application will be used periodically. I know how to import the csv data to a table. How do I delete all data prior to importing new data? Thank you for all help. JohnM -- Posted via http://www.ruby-forum.com/.
I have this: imports_controller: def process_csv # First thing, clear "Imports" table of data @import = Import.find(:all) @import.destroy file = params[:import][:file] rowcount = 0 Import.transaction do FasterCSV.parse(file, :headers => true, :header_converters => :symbol ) do |row| Import.create!(row.to_hash) rowcount += 1 end end flash[:notice] = "Successfully added #{rowcount} project(s)." redirect_to :action => :process_csv rescue => exception # If an exception in thrown, the transaction rolls back and we end up in this # rescue block error = ERB::Util.h(exception.to_s) # get the error and HTML escape it flash[:error] = "Error adding logs. (#{error}). Please try again." redirect_to :action => :index end ------------------------------------------------------------------------------- When I do this I get this error... "Error adding logs. (undefined method `destroy'' for #<Array:0x241d1e0>). Please try again." Any clues? Thanks, JohnM John Mcleod wrote:> Hello all, > I''m using Ruby 1.8.6 and Rails 2.3.3. > I''m new at Rails so bear with me, please. > > My application reads in a csv file to a staging (imports) table then > compares the contents of the table to a main (projects) table. Then > imports all non-repetitive rows to the main table. > This application will be used periodically. > > I know how to import the csv data to a table. > How do I delete all data prior to importing new data? > > Thank you for all help. > > JohnM-- Posted via http://www.ruby-forum.com/.
2009/8/26 John Mcleod <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>:> > Hello all, > I''m using Ruby 1.8.6 and Rails 2.3.3. > I''m new at Rails so bear with me, please. > > My application reads in a csv file to a staging (imports) table then > compares the contents of the table to a main (projects) table. Then > imports all non-repetitive rows to the main table. > This application will be used periodically. > > I know how to import the csv data to a table. > How do I delete all data prior to importing new data?YourModel.delete_all Colin
2009/8/26 John Mcleod <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>:> > I have this: > imports_controller: > > def process_csv > # First thing, clear "Imports" table of data > @import = Import.find(:all) > -PVP2ot6PNBOCCdwpHTPE7A@public.gmane.orgJust use Import.delete_all, provided you do not need any callbacks etc. destroy only works on a single record, you are trying to use it on an array. You would have to do @import.each {|i| i.destroy} or similar Colin> file = params[:import][:file] > > rowcount = 0 > > Import.transaction do > FasterCSV.parse(file, > :headers => true, > :header_converters => :symbol ) do |row| > Import.create!(row.to_hash) > rowcount += 1 > end > end > > flash[:notice] = "Successfully added #{rowcount} project(s)." > > redirect_to :action => :process_csv > > rescue => exception > # If an exception in thrown, the transaction rolls back and we end > up in this > # rescue block > error = ERB::Util.h(exception.to_s) # get the error and HTML escape > it > flash[:error] = "Error adding logs. (#{error}). Please try again." > redirect_to :action => :index > end > ------------------------------------------------------------------------------- > > When I do this I get this error... > > "Error adding logs. (undefined method `destroy'' for #<Array:0x241d1e0>). > Please try again." > > Any clues? > > Thanks, > > JohnM > > > John Mcleod wrote: >> Hello all, >> I''m using Ruby 1.8.6 and Rails 2.3.3. >> I''m new at Rails so bear with me, please. >> >> My application reads in a csv file to a staging (imports) table then >> compares the contents of the table to a main (projects) table. Then >> imports all non-repetitive rows to the main table. >> This application will be used periodically. >> >> I know how to import the csv data to a table. >> How do I delete all data prior to importing new data? >> >> Thank you for all help. >> >> JohnM > > -- > Posted via http://www.ruby-forum.com/. > > > >
Colin, I used the array approach and it worked. Like this... @import = Import.find(:all) @import.each { |i| i.destroy } Thanks for the input. John Colin Law wrote:> 2009/8/26 John Mcleod <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>: >> >> I have this: >> imports_controller: >> >> def process_csv >> # First thing, clear "Imports" table of data >> @import = Import.find(:all) >> -PVP2ot6PNBOCCdwpHTPE7A@public.gmane.org > > Just use Import.delete_all, provided you do not need any callbacks etc. > destroy only works on a single record, you are trying to use it on an > array. You would have to do > @import.each {|i| i.destroy} or similar > > Colin-- Posted via http://www.ruby-forum.com/.