使用gem roo导入记录

时间:2017-10-09 19:50:35

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 roo-gem

我正在尝试使用excel文件使用gem roo将记录导入数据库,它很好地利用了this tutorial,我正在导入属于关系的嵌套记录" has_one"再次导入时,excel me会更新数据,但是如何更新那些" has_many"?的嵌套资源的数据?如果每次我再次使用相同的数据导入文件时它会重新创建记录,这是我的模型:

class Cliente < ActiveRecord::Base

  has_many :reldaycli, class_name: "Reldayc", foreign_key: "CodCli"
  accepts_nested_attributes_for :reldaycli, reject_if: proc{|attributes| attributes['RutaId'].blank?}


    def self.import(file,empresa)#importar
      @errors = []
      spreadsheet = open_spreadsheet(file)
      header = spreadsheet.row(1)
      (2..spreadsheet.last_row).each do |i|
        row = Hash[[header, spreadsheet.row(i)].transpose]
        cliente = find_by_IdCli(row["Clave"]) || new
        cliente.attributes = {IdCli: row["Clave"], Nombre: row["Encargado"], NombreCorto: row["Nombre Comercial"], Direccion: row["Calle y N°"], CP: row["C.P"], Colonia: row["Colonia"], Latitud: row["Latitud"], Longitud: row["Longitud"], Referencia: row["Referencia"], Status: row["Activo"], Telefono: row["Teléfono"], Tel2: row["Tel. Celular"], Email: row["Email"], Horario: row["Horario"], Credito: row["Credito"], LimiteCredito: row["Limite Credito"], DiasCreedito: row["Días Credito"], Saldo: row["Saldo inicial"], VisitaObligada: row["Visita Obligada"], FirmaObligada: row["Firma Obligada"], IdEmpresa: empresa}


        cliente.reldaycli_attributes = [{RutaId: row["IdRuta"], idVendedor: row["IdVendedor"], Lunes: row["Lunes"], Martes: row["Martes"], Miercoles: row["Miércoles"], Jueves: row["Jueves"], Viernes: row["Viernes"], Sabado: row["Sábado"], Domingo: row["Domingo"], IdEmpresa: empresa}]



        if cliente.save
          # stuff to do on successful save
         else
           cliente.errors.full_messages.each do |message|
             @errors << "Error fila #{i}, columna #{message}"
           end
         end


      end
      @errors #  <- need to return the @errors array
    end

end

0 个答案:

没有答案