Yoklan
Yoklan

Reputation: 211

Import and Create Records from CSV

I'm trying create records in the Pairing table from a CSV file upload. The file given will be in this format

supervisor,student,project_title
Bob,Alice,Web Site
Bob,Charlie,Web Application

Issue is the Pairing table doesn't hold supervisor or student names but rather their IDs, so it would be necessary to search the User table for these given names and select their IDs then create the Pairing with these ids and the given project title.

The code below is giving me a too many redirects error and inserting a null record into the pairings table.

Pairing.rb

def self.import(file)

    CSV.foreach(file.path, headers: true) do |row|

      supervisorName = row[0]
      studentName = row[1]
      title = row [2]

      supervisorID = User.select(:id).where(name: supervisorName)
      studentID = User.select(:id).where(name: studentName)

      pair = Pairing.new
      pair.supervisor_id = supervisorID
      pair.student_id = studentID
      pair.project_title = title
      pair.save

    end
end

Pairings_controller.rb

  def new
    @pairing = Pairing.new
  end

  def create
    @pairing = Pairing.new(pairing_params)
    if @pairing.save
      redirect_to pairings_path, :notice => "Pairing Successful!"
    else 
      redirect_to pairings_path, :notice => "Pairing Failed!"
    end
  end

  def import
    Pairing.import(params[:file])
    redirect_to pairings_path, :notice => "Pairs Imported"
  end

Upvotes: 1

Views: 592

Answers (1)

Anthony E
Anthony E

Reputation: 11235

The statement User.select(:id).where(name: supervisorName) won't return an integer value as you're expecting. Consider using User.find_by(name: supervisorName).id Instead.

As for too many redirects, make sure that the action matching your pairings_path doesn't redirect back to itself or other actions that may yield circular redirects.

Upvotes: 3

Related Questions