[RUBY] [Rails] Implémentation de la fonction d'importation CSV

Cible

ezgif.com-video-to-gif.gif

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Présentation minceIntroduction de Bootstrap 3Mise en œuvre de la fonction de publication

la mise en oeuvre

1. Présentez Gem

Gemfile


#Postscript
gem 'roo'

Terminal


$ bundle

2. Editez ʻapplication.rb`

application.rb


require_relative 'boot'

require 'rails/all'
require 'csv' #Postscript

Bundler.require(*Rails.groups)

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

3. Édition du modèle

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) Si le même ID est trouvé dans les données à importer, l'enregistrement est appelé, et s'il n'est pas trouvé, un nouveau est créé.

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

(2) Obtenez des données à partir du fichier CSV.

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

③ Enregistrez sans passer par la validation.

book.save!(validate: false)

(4) Définissez les colonnes à recevoir lors de l'importation de CSV.

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

4. Modifiez le contrôleur

books_controller.rb


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

5. Ajouter un routage

routes.rb


resources :books do
  collection { post :import }
end

6. Modifier la vue

slim:books/index.html.slim


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

Recommended Posts

[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Implémentation de la fonction de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
Rails [Pour les débutants] Implémentation de la fonction de commentaire
[Ruby on rails] Implémentation d'une fonction similaire
Implémentation de la fonction de recherche
Mise en œuvre de la fonction de pagénation
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
Implémentation de la suppression d'ajax dans Rails
Implémentation de la fonction de recherche floue Rails
Implémentation de la fonction de recherche séquentielle
Implémentation d'une fonction similaire (Ajax)
Implémentation de la fonction de prévisualisation d'image
Mise en œuvre de la fonction déroulante de catégorie
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
[Rails] Implémentation de la suppression logique utilisateur
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
[Ruby on Rails] Fonction de sortie CSV
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Ruby on Rails] Implémentation de la fonction de commentaire
Implémenter la fonction de téléchargement CSV dans Rails
[Rails] Commentaire mémo de procédure d'implémentation
Implémentation d'une fonction similaire en Java
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
[Rails] Implémentation de la fonction de balise à l'aide de la fonction agit-as-taggable-on et de la fonction de complétion d'entrée de balise à l'aide de tag-it
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Rails Ajout d'une fonction de connexion facile et facile
[Ruby on Rails] Suivez l'implémentation de la fonction: bidirectionnelle
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Échafaudage de procédure d'implémentation de fonction CRUD de base