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/.