roo gem - Getting uninitialized constant Student::Roo error while importing csv file in rails -
i have application on want provide feature import records csv , excel file formats. using roo gem it, @ time of importing gives error "uninitialized constant student::roo".
here code :
student.rb
def self.import(file) spreadsheet = open_spreadsheet(file) header = spreadsheet.row(1) (2..spreadsheet.last_row).each |i| row = hash[[header, spreadsheet.row(i)].transpose] product = find_by_id(row["id"]) || new product.attributes = row.to_hash.slice(*accessible_attributes) product.save! end end def self.open_spreadsheet(file) case file.extname(file.original_filename) when ".csv" roo::csv.new(file.path, nil, :ignore) when ".xls" roo::excel.new(file.path, nil, :ignore) when ".xlsx" roo::excelx.new(file.path, nil, :ignore) else raise "unknown file type: #{file.original_filename}" end end student_controller.rb :
def import student.import(params[:file]) #puts @session[:current_organization_id].inspect redirect_to students_path, notice: "record imported successfully." end new.html.erb :
<%= form_tag import_students_path, multipart: true %> <%= file_field_tag :file , :required=> true%> <br/> <%= submit_tag "import" , :class => "btn btn-primary btn-block" %> <% end %> gemfile :
source 'https://rubygems.org' gem 'rails', '4.2.0' gem 'mysql2' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.1.0' gem 'therubyracer', platforms: :ruby gem 'jquery-rails' gem 'jbuilder', '~> 2.0' gem 'sdoc', '~> 0.4.0', group: :doc gem 'sass', '3.2.19' gem 'bower-rails' gem 'font-awesome-sass' gem 'devise' gem 'roo' group :development, :test gem "rspec-rails", "~> 2.0" gem "factory_girl_rails", "~> 4.0" gem "capybara" gem "database_cleaner" gem "selenium-webdriver" end student.csv : test data student.
enrollment_no,roll_no,address,father_name 11,21,test,test 17,21,test,test 18,21,test,test 19,21,test,test 20,21,test,test 22,21,test,test 23,21,test,test 24,21,test,test
first, after @skv comment: correct name csv class roo::csv , not roo::csv.
if error persists, means of roo classes (roo::csv, roo::excel, etc) not defined @ point in student class. means that, while added roo gem gemfile , bundled, need require roo wherever want use gem. mentioned in gem docs.
add require 'roo' top of student.rb file , should work fine:
# student.rb require 'roo' # <==== class student < activerecord::base def self.open_spreadsheet(file) ... end end
Comments
Post a Comment