Hello all, I''m trying to validate a uploaded file extension. I''m not using any special plugin other that fastercsv. When I try to upload an incorrect file (say a ".doc"), I get this error message... "Error adding logs. (Unquoted fields do not allow \r or \n (line 2).). Please try again." Below is my model. -model- class Import < ActiveRecord::Base validates_format_of :import, :with => /^.+\.(csv)$/, :message => ''A .csv file is required.'' end It should work but it doesn''t. Any help with this is greatly appreciated. Thank you. JohnM -- Posted via http://www.ruby-forum.com/.
I think you try to parse the csv before saving the model to the db. Thats when validations would be run. You should catch any FasterCSV Exceptions and give a proper error message in the controller. 2009/10/8, John Mcleod <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>:> > Hello all, > I''m trying to validate a uploaded file extension. I''m not using any > special plugin other that fastercsv. > > When I try to upload an incorrect file (say a ".doc"), I get this error > message... > "Error adding logs. (Unquoted fields do not allow \r or \n (line 2).). > Please try again." > > Below is my model. > > -model- > class Import < ActiveRecord::Base > validates_format_of :import, :with => /^.+\.(csv)$/, > :message => ''A .csv file is required.'' > end > > It should work but it doesn''t. > > Any help with this is greatly appreciated. > Thank you. > > JohnM > -- > Posted via http://www.ruby-forum.com/. > > > >-- Von meinen Mobilgerät aus gesendet
+1 on Mike''s suggestion - otherwise, you''ll get users RENAMING their .doc file to end with .csv and uploading it over and over... :) --Matt Jones On Oct 8, 11:47 am, John Mcleod <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Hello all, > I''m trying to validate a uploaded file extension. I''m not using any > special plugin other that fastercsv. > > When I try to upload an incorrect file (say a ".doc"), I get this error > message... > "Error adding logs. (Unquoted fields do not allow \r or \n (line 2).). > Please try again." > > Below is my model. > > -model- > class Import < ActiveRecord::Base > validates_format_of :import, :with => /^.+\.(csv)$/, > :message => ''A .csv file is required.'' > end > > It should work but it doesn''t. > > Any help with this is greatly appreciated. > Thank you. > > JohnM > -- > Posted viahttp://www.ruby-forum.com/.
mike wrote:> I think you try to parse the csv before saving the model to the db. > Thats when validations would be run. You should catch any FasterCSV > Exceptions and give a proper error message in the controller. > > 2009/10/8, John Mcleod <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org>: >> Below is my model. >> Thank you. >> >> JohnM >> -- >> Posted via http://www.ruby-forum.com/. >> >> > >> > > -- > Von meinen Mobilger�t aus gesendetThanks for the advice. I checked the controller and sure enough there''s a ''rescue => exception'' I parsed out the file extension then did a simple conditional for ''csv'' Here''s my controller for anyone that falls into the same quagmire. - Controller - def process_csv 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 # if successful then display, then redirect to index page flash[:notice] = "Successfully added #{rowcount} project(s)." redirect_to :action => :index rescue => exception file_name = params[:import][''file''].original_filename file_parts = params[:import][''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 Import table. (#{error}). Please try again. " redirect_to :action => :new end Thanks again. JohnM -- Posted via http://www.ruby-forum.com/.