[RUBY] [Rails] Implementierung der CSV-Importfunktion

Ziel

ezgif.com-video-to-gif.gif

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Schlanke EinführungEinführung von Bootstrap 3Implementierung der Posting-Funktion

Implementierung

1. Stellen Sie Gem vor

Gemfile


#Nachtrag
gem 'roo'

Terminal


$ bundle

2. Bearbeiten Sie application.rb

application.rb


require_relative 'boot'

require 'rails/all'
require 'csv' #Nachtrag

Bundler.require(*Rails.groups)

module Bookers2Debug
  class Application < Rails::Application
    config.load_defaults 5.2
  end
end

3. Modellbearbeitung

book.rb


def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    book = find_by(id: row["id"]) || new
    book.attributes = row.to_hash.slice(*updatable_attributes)
    book.save!(validate: false)
  end
end

def self.updatable_attributes
  ['id', 'title', 'body']
end

(1) Wird in den zu importierenden Daten dieselbe ID gefunden, wird der Datensatz aufgerufen, und wenn er nicht gefunden wird, wird ein neuer erstellt.

book = find_by(id: row["id"]) || new

(2) Daten aus der CSV-Datei abrufen.

book.attributes = row.to_hash.slice(*updatable_attributes)

③ Speichern, ohne die Validierung zu durchlaufen.

book.save!(validate: false)

(4) Legen Sie die Spalten fest, die beim Importieren von CSV empfangen werden sollen.

def self.updatable_attributes
  ['id', 'title', 'body']
end

4. Bearbeiten Sie den Controller

books_controller.rb


def import
  Book.import(params[:file])
  redirect_to books_path
end

5. Routing hinzufügen

routes.rb


resources :books do
  collection { post :import }
end

6. Ansicht bearbeiten

slim:books/index.html.slim


= form_tag import_books_path, multipart: true do
  = file_field_tag :file
  br
  = submit_tag "importieren", class: 'btn btn-success'

Recommended Posts

[Rails] Implementierung der CSV-Importfunktion
[Rails] Implementierung der CSV-Exportfunktion
[Rails] Implementierung der Kategoriefunktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
Rails [Für Anfänger] Implementierung der Kommentarfunktion
[Ruby on Rails] Implementierung einer ähnlichen Funktion
Implementierung der Suchfunktion
Implementierung der Pagenationsfunktion
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
Implementierung der Ajax-Entfernung in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
Implementierung der sequentiellen Suchfunktion
Implementierung einer ähnlichen Funktion (Ajax)
Implementierung der Bildvorschau
Implementierung der Kategorie-Pulldown-Funktion
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
[Rails] Implementierung des logischen Löschens durch den Benutzer
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Edit Form Edition"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Erstellungsformular"
[Ruby on Rails] CSV-Ausgabefunktion
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
[Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Ruby on Rails] Implementierung der Kommentarfunktion
Implementieren Sie die CSV-Download-Funktion in Rails
[Rails] Memo zur Implementierung der Kommentarfunktion
Implementierung einer ähnlichen Funktion in Java
[Rails] Implementierung der Couponfunktion (mit automatischer Löschfunktion mittels Stapelverarbeitung)
[Rails] Implementierung der Tag-Funktion mit Acts-as-Taggable-On und der Funktion zur Vervollständigung der Tag-Eingabe mit Tag-It
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Schienen Hinzufügen einer einfachen Anmeldefunktion
[Ruby on Rails] Folgen Sie der Funktionsimplementierung: Bidirektional
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Rails Grundgerüst für die Implementierung der CRUD-Funktion