[RUBY] [Rails 6] Deux méthodes pour saisir plusieurs images à la fois à l'aide de CarrierWave / (1) Saisie avec les données de départ initiales / (2) Importer avec CSV

Il est facile d'insérer plusieurs autres colonnes de texte, mais j'ai eu du mal car toutes les colonnes d'image sont devenues nulles, voici donc deux méthodes pour saisir plusieurs colonnes d'image à la fois. Je vais.

environnement

(1) Comment saisir plusieurs colonnes d'image avec les données de départ initiales

Dans db / migrate / seed.rb,

seed.rb



Post.create!(image: /public/uploads/post/image/1/yatoguti.jpg,
park:Parc Tanitoguchi,
outline:Tous ceux qui connaissent Kubo le savent,
location:1-20-14 Kubo, Hino-shi, Tokyo,
access:5 minutes à pied de la gare Kubo sur le monorail)

Et puis rails db: reset et ensuite rails db: seed,

=> [#<Post:0x00007fa6c66bc8e8
  id: 27,
  image: nil,
  park: "Parc Tanitoguchi",
  outline:
   "Tous ceux qui connaissent Kubo le savent.",
  location: "10 minutes à pied de la gare de Takahata Fudo sur la ligne Keio en direction de la gare de Hyakusoen",
  access: "1024 Takahata, ville de Hino",
  created_at: Sun, 02 Aug 2020 14:38:30 JST +09:00,
  updated_at: Sun, 02 Aug 2020 14:38:30 JST +09:00,
  likes_count: nil,
  tag_list: ["#Jouer dans l'eau", "#Athlétique"]>,
 #<Post:0x00007fa6c7b48f28
  id: 28,
  image: nil,
  park: "Parc de pluie",
  outline: "C'est un parc à la fois lumineux et calme.",
  location: "8 sur 881 Hyakuso, Hino City",
  access: "3 minutes à pied à l'est de l'arrêt de bus de l'école élémentaire de Misawadai",
  created_at: Sun, 02 Aug 2020 14:38:30 JST +09:00,
  updated_at: Sun, 02 Aug 2020 14:38:30 JST +09:00,
  likes_count: nil,
:...skipping...

De cette manière, la ** colonne image devient nulle ** si seule l'URL est décrite directement.

Solution

Réécrivez la description de l'URL de l'image dans la colonne d'image comme suit.

seed.rb



Post.create!(image: File.open("#{Rails.root}/public/uploads/post/image/1/yatoguti.jpg "),
park:Parc Tanitoguchi,
outline:Tous ceux qui connaissent Kubo le savent,
location:1-20-14 Kubo, Hino-shi, Tokyo,
access:5 minutes à pied de la gare Kubo sur le monorail)

La description de la colonne image,

Post.create!(image: /public/uploads/post/image/1/yatoguti.jpg,

ne pas,

Post.create!(image: File.open("#{Rails.root}/public/uploads/post/image/1/yatoguti.jpg "),

Changer en. Puis rails db: reset et ensuite rails db: seed.

Avec cela, les données initiales de départ peuvent être entrées en une seule fois!

(2) Comment importer plusieurs colonnes d'images avec CSV

Étant donné que la saisie initiale des données a réussi avec seed.rb, cette fois, écrivez-la de la même manière avec db / csv_dara / csv_data.csv et lib / tasks / import_csv.rake, et essayez-la avec l'importation CSV.

csv_data.csv


image,park,outline,location,access,tag_list
File.open("#{Rails.root}/public/uploads/post/image/6/ajisai.jpg "),Parc Fuyo,C'est un petit parc juste à côté de "Takahata Fudo" à Hino City. Situé sur une colline dans le complexe d'habitation, c'est un lieu de détente pour les enfants locaux. Il y a des balançoires, des toboggans, des barres de fer, des champs de sable et il y a aussi un espace où vous pouvez jouer librement.,714 Takahata, Hino City, Tokyo-21,À 5 minutes à pied de la gare Takahata Fudo,#faire glisser#Barre de fer#Balançoire#Endroit de sable
File.open("#{Rails.root}/public/uploads/post/image/8/hohoemi.jpg "),Parc du sourire,Le monticule de béton est un parc populaire. Un tunnel qui court verticalement et horizontalement à l'intérieur du monticule, un itinéraire d'alpinisme avec un fermoir à l'extérieur, et un large toboggan et une zone de sable sont intégrés, pour que vous puissiez profiter d'une petite aventure.,2-31-6, Nanpei, Hino-shi,À 5 minutes à l'est de l'arrêt de bus Kitano Kaidoguchi,#faire glisser#Barre de fer#Balançoire
File.open("#{Rails.root}/public/uploads/post/image/7/hodokubo.jpg "),Espace ouvert du quartier Unkubo,Prairies et forêts légèrement en pente. Il n'y a pas d'équipement de jeu, mais vous pouvez grimper aux arbres, glisser sur l'herbe et ramasser des glands. C'est un champ, il est donc normal de se déplacer à mains nues.,3-22-2 Kubo, Hino City,À 5 minutes à pied à l'est de la station Tama Animal Park sur la ligne Keio,#herbe

lib/tasks/import_csv.rake


require 'csv'

namespace :import_csv do

  desc "Tâche d'importation des données CSV de la table de publication"
  task posts: :environment do
    path = File.join Rails.root, "db/csv_data/csv_data.csv"
    list = []
    CSV.foreach(path, headers: true) do |row|
      list << {
          image: row ["image"],
          park: row["park"],
          outline: row["outline"],
          location: row["location"],
          access: row["access"],
          tag_list: row["tag_list"]
      }
    end
    puts "Lancer le processus d'importation"
     Post.create!(list)
      puts "Importation terminée!!"
  end

end


Étant donné que c'est une description que la graine a été initialement entrée, j'ai pensé que l'importation CSV pouvait également être effectuée. Alors ...

rake aborted!
CSV::MalformedCSVError: Illegal quoting in line 2.
/Users/sekishinya/Desktop/park_app/lib/tasks/import_csv.rake:11:in `block (2 levels) in <main>'
Tasks: TOP => import_csv:posts
(See full trace by running task with --trace)

Impossible d'importer en raison d'une erreur. À l'origine, j'ai importé sans la colonne d'image, il n'y a donc aucun doute que la colonne d'image est le problème.

Solution

Contrairement au cas de la graine, CSV est traité comme ** toutes les chaînes de caractères **, donc la description est différente.

Par conséquent, réécrivez lib / tasks / import_csv.rake et db / csv_dara / csv_data.csv comme suit.

import_csv.rake


require 'csv'

namespace :import_csv do

  desc "Tâche d'importation des données CSV de la table de publication"
  task posts: :environment do
    path = File.join Rails.root, "db/csv_data/csv_data.csv"
    list = []
    CSV.foreach(path, headers: true) do |row|
      list << {
          image: File.open("#{Rails.root}/#{row["image"]}"),
          park: row["park"],
          outline: row["outline"],
          location: row["location"],
          access: row["access"],
          tag_list: row["tag_list"]
      }
    end
    puts "Lancer le processus d'importation"
     Post.create!(list)
      puts "Importation terminée!!"
  end

end

La description de la colonne image de ʻImport_csv.rake`,

image: row ["image"],

ne pas,

image: File.open("#{Rails.root}/#{row["image"]}"),

Changer en.

Ensuite, modifiez la colonne d'image de csv_data.csv comme suit.

csv_data.csv


image,park,outline,location,access,tag_list
"public/uploads/post/image/8/fuyou.jpg ",Parc Fuyo,C'est un petit parc juste à côté de "Takahata Fudo" à Hino City. Situé sur une colline dans le complexe d'habitation, c'est un lieu de détente pour les enfants locaux. Il y a des balançoires, des toboggans, des barres de fer, des champs de sable et il y a aussi un espace où vous pouvez jouer librement.,714 Takahata, Hino City, Tokyo-21,À 5 minutes à pied de la gare Takahata Fudo,#faire glisser#Barre de fer#Balançoire#Endroit de sable
"public/uploads/post/image/8/hohoemi.jpg ",Parc du sourire,Le monticule de béton est un parc populaire. Un tunnel qui court verticalement et horizontalement à l'intérieur du monticule, un itinéraire d'alpinisme avec un fermoir à l'extérieur, et un large toboggan et une zone de sable sont intégrés, pour que vous puissiez profiter d'une petite aventure.,2-31-6, Nanpei, Hino-shi,À 5 minutes à l'est de l'arrêt de bus Kitano Kaidoguchi,#faire glisser#Barre de fer#Balançoire
"public/uploads/post/image/8/hodokubo.jpg ",Espace ouvert du quartier Unkubo,Prairies et forêts légèrement en pente. Il n'y a pas d'équipement de jeu, mais vous pouvez grimper aux arbres, glisser sur l'herbe et ramasser des glands. C'est un champ, il est donc normal de se déplacer à mains nues.,3-22-2 Kubo, Hino City,À 5 minutes à pied à l'est de la station Tama Animal Park sur la ligne Keio,#herbe

Au moment de l'amorçage, il n'a pas réussi à décrire uniquement l'URL, mais ** à l'inverse, il est préférable d'écrire uniquement l'URL ** pour les données CSV.

Avec cela, nous avons réussi à importer plusieurs images à la fois même avec CSV!

Recommended Posts

[Rails 6] Deux méthodes pour saisir plusieurs images à la fois à l'aide de CarrierWave / (1) Saisie avec les données de départ initiales / (2) Importer avec CSV
[Rails] Comment télécharger plusieurs images à l'aide de Carrierwave
Rails6: saisissez les données initiales d'ActionText à l'aide de seed
[Rails] Création initiale des données avec seed
[Rails] Entrée de données initiale avec seed_fu!
[Rails] Comment télécharger des images à l'aide de Carrierwave
Un script qui crée yaml à partir de CSV pour mettre les données initiales dans Rails with Fixtures
Téléchargez facilement plusieurs images avec rails rails + carrierwave + cloudinary
Créez un site EC avec Rails5 ⑥ ~ entrée de données de départ ~
[Rails] Enregistrez des images à l'aide de carrierwave
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws