2014-07-26 5 views
0

J'ai besoin d'importer un gros fichier CSV dans un projet Rails. J'utilise: rubis 2.1.2p95 Rails 4.1.1 mysql Ver 14,14Quelle est la meilleure façon de remplir des clés étrangères en utilisant une tâche rake?

Je suis en train de le faire comme une tâche de râteau, en créant d'abord des enregistrements dans les tables indépendantes, obtenir le record id est pour les enregistrements et les utiliser pour les clés étrangères pour remplir les enregistrements dans les tables dépendantes. J'essaie de créer uniquement les enregistrements indépendants, et d'imprimer ces identifiants étrangers, en opérant d'abord sur un petit fichier de test.

Cependant, je reçois cette fin de fichier, je ne comprends pas:

rake aborted! 
SyntaxError: /Users/rickcasey/Projects/Programming/WikiFrac/wfrails/lib/tasks/import_partial.rake:94: 

erreur de syntaxe, keyword_end inattendue, attendre fin de l'entrée

Cette est ce que mon script râteau ressemble:

#lib/tasks/import_partial.rake 
require 'csv' 

# Independent tables: 
# Companies 
# Counties 
# Fields 
# Formations 
# Gastypes 
# Wells 
# 
# Dependendecies and foreign key field used to find correct record id: 
# Facilities.company_id -> Companies.company_name 
# Facilities.field_id -> Fields.field_name 
# Facilities.county_id -> Counties.county_name 
# Wells.gastype_id  -> GasTypes.gas_type 

task :import_partial => :environment do  
    csv.foreach('public/partial.csv', :headers => true) do |row| 

      # create records in independent tables 

      # create the Company object 
      this_company_name = row.to_hash.slice(*%w[county_name]) 
      if !(Company.exists?(company_name: this_company_name)) 
       Companies.create(row.to_hash.slice(*%w[company_name operator_num])) 
      end 
      thecompany = Company.find(this_company_name) 
      company_id = thecompany.id 

      # create the County object 
      this_county_name = row.to_hash.slice(*%w[county]) 
      if !(County.exists?(county_name: this_county_name)) 
       Counties.create(county_name: this_county_name) 
      end 
      thecounty = County.find(this_county_name) 
      county_id = thecounty.id 

      # create the GasType object 
      this_gastype_name = row.to_hash.slice(*%w[gas_type]) 
      if !(GasType.exists?(gastype_name: this_gastype_name)) 
       GasType.create(gastype_name: this_gastype_name) 
      end 
      thegastype = GasType.find(this_gastype_name) 
      gastype_id = thegastype.id 


      # create the Field object 
      this_field_name = row.to_hash.slice(*%w[field]) 
      if !(Field.exists?(field_name: this_field_name)) 
       Field.create(field_name: this_field_name, field_code: field_code) 
      end 
      thefield = Field.find(this_field_name) 
      field_id = thefield.id 

      # create the Formations object 
      this_formation_name = row.to_hash.slice(*%w[formation]) 
      if !(Formation.exists?(formation_name: this_formation_name)) 
       Counties.create(formation: this_formation_name, formation_code: formation_code) 
      end 
      theformation = Formation.find(this_formation_name) 
      formation_id = theformation.id 

      # debugging: 
      puts "company_id:", company_id 
      puts "county_id:", county_id 
      puts "gastype_id:", gastype_id 
      puts "field_id:", field_id 

      # create records in dependent tables: 
      # Use the record id's from above independent table create records containing foreign keys: 

      #Facilities.create(row.to_hash.slice(*%w[dir_e_w dir_n_s dist_e_w dist_n_s facility_name facility_num ground_elev lat long meridian qtrqtr range sec twp utm_x utm_y]) 

      #Wells.create(row.to_hash.slice(*%w[api_county_code api_seq_num first_prod_date form_status_date formation_status sidetrack_num spud_date status_date td_date test_date wbmeasdepth wbtvd well_bore_status well_name]) 


     end 
    end 
end 

Toutes les suggestions appréciées ...

Répondre

3

Vous avez 1 trop d'expressions end à la fin de votre fichier.

Questions connexes