2010-09-13 15 views
9

Ho un'applicazione Rails 3 con una classe User e un file delimitato da tabulazioni di utenti che voglio importare.come importare i dati in rotaie?

Come posso ottenere l'accesso al modello Active Record di fuori della console rotaie, in modo che io possa scrivere uno script per fare

require "???active-record???" 

File.open("users.txt", "r").each do |line| 
    name, age, profession = line.strip.split("\t") 
    u = User.new(:name => name, :age => age, :profession => profession) 
    u.save 
end 

faccio ad usare le "AR-estensioni" gioiello, o c'è un altro modo? (Non mi interessa particolarmente la velocità in questo momento, voglio solo qualcosa di semplice.)

risposta

14

È possibile scrivere un metodo di rake in questo modo. Aggiungere questo in un file nella cartella my_rakes.rake your_app/lib/task:

desc "Import users." 
    task :import_users => :environment do 
    File.open("users.txt", "r").each do |line| 
     name, age, profession = line.strip.split("\t") 
     u = User.new(:name => name, :age => age, :profession => profession) 
     u.save 
    end 
    end 

Un quindi chiamare $ rake import_users dalla cartella principale della vostra applicazione nel Terminal.

4

Utilizzare la gemma activerecord-import per l'importazione di massa.

installare tramite il vostro Gemfile:

gem 'activerecord-import' 

Raccogliere gli utenti e l'importazione:

desc "Import users." 
task :import_users => :environment do 
    users = File.open("users.txt", "r").map do |line| 
    name, age, profession = line.strip.split("\t") 
    User.new(:name => name, :age => age, :profession => profession) 
    end 
    User.import users 
end 
+0

Che dire se voglio verificare se esiste la voce ed effettuare un aggiornamento se lo fa. Se è una nuova voce, vorrei crearla. Non è sicuro che ciò funzionerebbe con la mappatura? – MMachinegun

Problemi correlati