Skip to content

Instantly share code, notes, and snippets.

@bjhaid
Created August 3, 2012 13:24
Show Gist options
  • Save bjhaid/3247682 to your computer and use it in GitHub Desktop.
Save bjhaid/3247682 to your computer and use it in GitHub Desktop.
Uploading CSV files into Rails 3 Database
Model
uploader.rb
#The csv I am using were created from some code manipulation hence not well formatted, I am stripping off new lines and merging fields in some cases
class Uploader
def self.csv_loader(model)
File.open("#{Rails.root}/data/#{model}.csv", 'r').each do |row|
new_row = row.split(",")
case
when model == 'Brand'
eval(model).create!(:name => row.gsub("\n", ''))
when model == 'Serie'
eval(model).create!(:brand_name => new_row[0], :name => new_row[1].gsub("\n", ''))
when model == 'Ink'
eval(model).create!(:brand_name => new_row[0], :serie_name => new_row[1], :printer_name => new_row[2], :name => new_row[3..(new_row.size - 1)].join(",").gsub("\n", ''))
when model == 'Inkname'
eval(model).create!(:brand_name => new_row[0], :name => new_row[1].gsub("\n", ''))
when model == 'Printer'
eval(model).create!(:brand_name => new_row[0], :serie_name => new_row[1], :name => new_row[2..(new_row.size - 1)].join(",").gsub("\n", ''))
end
end
end
end
Application Controller
#The assumption here is a one-to-one mapping between controllers and models
application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
protected
def db_check
model = self.class.to_s.gsub("Controller", '').singularize
Uploader.csv_loader(model) if eval(model).all.empty?
end
end
Sample controller
class InksController < ApplicationController
before_filter :db_check
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment