Как игнорировать дубликаты при импорте файла xlsx? - PullRequest
0 голосов
/ 19 октября 2018

Я работаю над проектом, и мне нужно импортировать немного Phones на мой сайт.Каждый телефон имеет IMEI и ref_number.

Однако некоторые из этих Phones уже находятся в БД, что удлиняет запрос и приводит к ошибке приложения в Heroku.

Вотmy phones_controller.rb:

def import_xlsx
  if params[:xlsx].nil?
    render :import_phones
  else
    filepath = params[:xlsx].path
    xlsx = Roo::Spreadsheet.open(filepath)
    xlsx = Roo::Excelx.new(filepath)
    xlsx.default_sheet = xlsx.sheets.first
    csv = xlsx.to_csv
    csv_options = { col_sep: ',', headers: :first_row, quote_char: '"' }
    csv_new = CSV.new(csv)
    CSV.parse(csv, csv_options) do |row|
      p = Phone.new(imei: row[0], ref_number: row[1])
      p.imei.gsub(/\s+/, "")
      if p.valid?
        p.save!
      else
        flash[:alert] = "#{p.imei}"
      end
    end
  redirect_to phones_import_path, notice: 'Votre fichier à bien été envoyer'
end

end

Итак, есть ли способ сделать это или, возможно, сделать запрос быстрее?

1 Ответ

0 голосов
/ 19 октября 2018

в модели Phone вы можете добавить валидатор уникальности, например так:

validate :imei, uniqueness: true

, чтобы при попытке сохранить телефон он не проходил валидации и не сохранялся,В данном случае это валидатор дубликатов полей.

Дополнительная информация о валидаторах

...