Created
August 3, 2012 13:24
-
-
Save bjhaid/3247682 to your computer and use it in GitHub Desktop.
Uploading CSV files into Rails 3 Database
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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