rails importing ruby-on-rails rake import-from-csv

ruby-on-rails - importing csv rails



¿Cómo puedo importar un archivo CSV a través de una tarea de rake? (5)

Aquí hay un ejemplo de CSV que importé usando rake db: seed. Escribí esto en el archivo seeds.rb y puse el archivo CSV en /public/seed_data/zip_code.csv. Es bastante autoexplicativo (es decir, el csv tiene tres columnas: código, largo y lat.

El código analiza cada línea, extrae los datos pertinentes y los asigna a una variable local y luego los escribe en un registro. Espero eso ayude.

File.open("#{Rails.root}/public/seed_data/zip_code.csv") do |zip_codes| zip_codes.read.each_line do |zip_code| code, longitude, latitude = zip_code.chomp.split(",") # to remove the quotes from the csv text: code.gsub!(//A"|"/Z/, '''') # to create each record in the database ZipCodeGeo.create!(:zip_code => code, :longitude => longitude, :latitude => latitude) end end

Sé que esta pregunta se ha planteado mucho en este foro, pero tengo una fecha límite estricta y necesito ayuda, por lo que cualquier consejo es muy apreciado. Soy nuevo en Ruby on Rails, así que tenlo en cuenta al responder. Quiero crear una tarea de rake que, cuando se ejecuta, actualiza varias tablas en mysqlite db. Este es un archivo de migración que crea un nuevo incidente en mi db. ¿Cómo creo una tarea de rake que ingrese toda esta información a través de un archivo CSV? ¿Puede alguien, POR FAVOR, ayudarme a escribir el archivo de rastrillo de principio a fin? Obviamente no necesitas escribir cada tarea para cada cadena, solo dame algunos ejemplos. Y además del archivo de rastrillo real, ¿necesito agregar código a otra parte de mi aplicación (sé que es una pregunta muy general, pero si necesito agregar código, apreciaría una descripción general de dónde). Siento que un poco de orientación irá por el camino. Si alguien necesita más información de mi por favor solo pregunte.

class CreateIncidents < ActiveRecord::Migration def self.up create_table :incidents do |t| t.datetime :incident_datetime t.string :location t.string :report_nr t.string :responsible_party t.string :area_resident t.string :street t.string :city t.string :state t.string :home_phone t.string :cell_phone t.string :insurance_carrier_name t.string :insurance_carrier_street t.string :insurance_carrier_city t.string :insurance_carrier_state t.string :insurance_carrier_phone t.string :insurance_carrier_contact t.string :policy_nr t.string :vin_nr t.string :license_nr t.string :vehicle_make t.string :vehicle_model t.string :vehicle_year t.timestamps end end def self.down drop_table :incidents end end


He usado este en el pasado. Lleva cualquier tipo de modelo.

rastrillo csv_model_import [bunnies.csv, Bunny]

Funciona de maravilla.

desc "Imports a CSV file into an ActiveRecord table" task :csv_model_import, :filename, :model, :needs => :environment do |task,args| lines = File.new(args[:filename]).readlines header = lines.shift.strip keys = header.split('','') lines.each do |line| params = {} values = line.strip.split('','') keys.each_with_index do |key,i| params[key] = values[i] end Module.const_get(args[:model]).create(params) end end


Puede leer su archivo csv utilizando el módulo CSV de rieles y puede crear registros. Aquí está la ayuda detallada: poblar db usando csv


Trabajé en esto por horas y horas un día. Finalmente lo hice funcionar haciendo lo siguiente:

  1. Agregué un encabezado en la primera fila a mi archivo csv que reflejaba el attr_accessible en mi modelo. En mi caso, mi modelo fue attr_accessible :intro attr_accessible :name y en mi archivo csv la primera línea leyó name, intro.
  2. Creó un archivo rastrillo personalizado. Nombré el archivo import.rake y lo coloqué en la carpeta lib / tasks. Coloque este código en ese archivo:

#lib/tasks/import.rake require ''csv'' desc "Imports a CSV file into an ActiveRecord table" task :import, [:filename] => :environment do CSV.foreach(''myfile.csv'', :headers => true) do |row| MyModel.create!(row.to_hash) end end

Luego escriba bundle exec rake import en la línea de comando.

Para hacer que esto funcionara tuve bastante SQLite Database Browser. ¡Espero que ayude a alguien!


debajo de la carpeta del proyecto en lib / task cree un archivo de rake que diga "import_incidents_csv.rake"

siga esto Ruby on Rails - Importar datos desde un archivo CSV

En el archivo rastrillo tenemos el siguiente código

require ''csv'' namespace :import_incidents_csv do task :create_incidents => :environment do "code from the link" end end

Puede llamar a esta tarea como "rake import_incidents_csv: create_incidents"