2010-09-13 28 views
9

Tengo una aplicación Rails 3 con una clase de usuario y un archivo delimitado por tabuladores de usuarios que deseo importar.cómo importar datos en rieles?

¿Cómo puedo obtener acceso al modelo Active Record fuera de la consola de rieles, de modo que pueda escribir un script para hacer

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 

puedo utilizar la "ar-extensions" gema, o hay otra ¿camino? (No me preocupa particularmente la velocidad en este momento, solo quiero algo simple.)

Respuesta

14

Puede escribir un método de rastrillo para que así sea. Agregue esto a un archivo en la carpeta my_rakes.rake your_app/lib/tareas:

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 $ rake import_users luego llamar desde la carpeta raíz de la aplicación en el terminal.

4

Utilice la activerecord-import gema para la importación masiva.

instalar a través de su Gemfile:

gem 'activerecord-import' 

Obtenga los usuarios y de importación:

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

¿Qué pasa si quiero comprobar si existe la entrada y llevar a cabo una actualización si lo hace. Si es una nueva entrada, me gustaría crearla. ¿No estoy seguro de que esto funcione con el mapeo? – MMachinegun