[RUBY] [Rails 6] Zwei Methoden zur gleichzeitigen Eingabe mehrerer Bilder mit CarrierWave / (1) Eingabe mit anfänglichen Startdaten / (2) Import mit CSV

Es ist einfach, mehrere andere Textspalten einzufügen, aber es fiel mir schwer, weil alle Bildspalten gleich Null wurden. Hier sind zwei Methoden, um mehrere Bildspalten gleichzeitig einzugeben. Ich werde.

Umgebung

(1) Eingabe mehrerer Bildspalten mit den anfänglichen Startdaten

In db / migrate / seed.rb,

seed.rb



Post.create!(image: /public/uploads/post/image/1/yatoguti.jpg,
park:Tanitoguchi Park,
outline:Jeder, der Kubo kennt, weiß es,
location:1-20-14 Kubo, Hino-shi, Tokio,
access:5 Minuten zu Fuß von der Kubo Station mit der Monorail)

Und dann Rails db: reset und dann Rails db: seed,

=> [#<Post:0x00007fa6c66bc8e8
  id: 27,
  image: nil,
  park: "Tanitoguchi Park",
  outline:
   "Jeder, der Kubo kennt, weiß es.",
  location: "10 Minuten zu Fuß von der Takahata Fudo Station auf der Keio Line in Richtung Hyakusoen Station",
  access: "1024 Takahata, Hino City",
  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: ["#Im Wasser spielen", "#Sportlich"]>,
 #<Post:0x00007fa6c7b48f28
  id: 28,
  image: nil,
  park: "Niederschlagspark",
  outline: "Es ist ein Park, der sowohl Helligkeit als auch eine ruhige Atmosphäre hat.",
  location: "8 von 881 Hyakuso, Hino City",
  access: "3 Minuten zu Fuß östlich von der Bushaltestelle der Misawadai Grundschule",
  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...

Auf diese Weise wird die ** Bildspalte zu Null **, wenn nur die URL direkt beschrieben wird.

Lösungen

Schreiben Sie die Beschreibung der Bild-URL in der Bildspalte wie folgt um.

seed.rb



Post.create!(image: File.open("#{Rails.root}/public/uploads/post/image/1/yatoguti.jpg "),
park:Tanitoguchi Park,
outline:Jeder, der Kubo kennt, weiß es,
location:1-20-14 Kubo, Hino-shi, Tokio,
access:5 Minuten zu Fuß von der Kubo Station mit der Monorail)

Die Beschreibung der Bildspalte,

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

nicht,

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

Ändern. Dann Schienen db: reset und dann Schienen db: seed.

Damit können die Startdaten auf einmal eingegeben werden!

(2) Importieren mehrerer Bildspalten mit CSV

Da die anfängliche Dateneingabe mit seed.rb erfolgreich war, schreiben Sie sie diesmal auf die gleiche Weise mit db / csv_dara / csv_data.csv und lib / task / import_csv.rake und versuchen Sie es mit CSV-Import.

csv_data.csv


image,park,outline,location,access,tag_list
File.open("#{Rails.root}/public/uploads/post/image/6/ajisai.jpg "),Fuyo Park,Es ist ein kleiner Park direkt neben "Takahata Fudo" in Hino City. Das Hotel liegt auf einem Hügel in der Wohnanlage und ist ein Ort der Entspannung für einheimische Kinder. Es gibt Schaukeln, Rutschen, Eisenstangen, Sandfelder und es gibt auch einen Raum, in dem Sie frei spielen können.,714 Takahata, Hino City, Tokio-21,5 Minuten zu Fuß vom Bahnhof Takahata Fudo entfernt,#rutschen#Eisenstange#Schwingen#Sandiger Ort
File.open("#{Rails.root}/public/uploads/post/image/8/hohoemi.jpg "),Smile Park,Die Betonhügel sind ein beliebter Park. Ein Tunnel, der vertikal und horizontal innerhalb des Hügels verläuft, eine Bergsteigerroute mit einem Verschluss außen sowie eine breite Rutsche und ein Sandbereich sind integriert, sodass Sie ein kleines Abenteuer genießen können.,2-31-6, Nanpei, Hino-shi,5 Minuten östlich von der Bushaltestelle Kitano Kaidoguchi,#rutschen#Eisenstange#Schwingen
File.open("#{Rails.root}/public/uploads/post/image/7/hodokubo.jpg "),Unkubo Bezirk Freifläche,Leicht abfallende Wiesen und Wälder. Es gibt keine Spielgeräte, aber Sie können Bäume klettern, Gras rutschen und Eicheln sammeln. Es ist ein Feld, also ist es in Ordnung, mit bloßen Händen herumzugehen.,3-22-2 Kubo, Hino City,5 Minuten zu Fuß östlich von der Tama Animal Park Station auf der Keio Line,#Gras

lib/tasks/import_csv.rake


require 'csv'

namespace :import_csv do

  desc "Aufgabe zum Importieren von CSV-Daten der Post-Tabelle"
  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 "Importvorgang starten"
     Post.create!(list)
      puts "Import abgeschlossen!!"
  end

end


Ich dachte, dass ein CSV-Import möglich sein würde, da beschrieben wurde, dass der Startwert ursprünglich eingegeben wurde. Dann ...

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)

Kann aufgrund eines Fehlers nicht importiert werden. Ursprünglich habe ich ohne die Bildspalte importiert, daher besteht kein Zweifel daran, dass die Bildspalte das Problem ist.

Lösungen

Im Gegensatz zu Seed wird CSV als ** alle Zeichenfolgen ** behandelt, daher ist die Beschreibung unterschiedlich.

Schreiben Sie daher "lib / task / import_csv.rake" und "db / csv_dara / csv_data.csv" wie folgt um.

import_csv.rake


require 'csv'

namespace :import_csv do

  desc "Aufgabe zum Importieren von CSV-Daten der Post-Tabelle"
  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 "Importvorgang starten"
     Post.create!(list)
      puts "Import abgeschlossen!!"
  end

end

Die Beschreibung der Bildspalte von import_csv.rake,

image: row ["image"],

nicht,

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

Ändern.

Ändern Sie dann die Bildspalte von "csv_data.csv" wie folgt.

csv_data.csv


image,park,outline,location,access,tag_list
"public/uploads/post/image/8/fuyou.jpg ",Fuyo Park,Es ist ein kleiner Park direkt neben "Takahata Fudo" in Hino City. Das Hotel liegt auf einem Hügel in der Wohnanlage und ist ein Ort der Entspannung für einheimische Kinder. Es gibt Schaukeln, Rutschen, Eisenstangen, Sandfelder und es gibt auch einen Raum, in dem Sie frei spielen können.,714 Takahata, Hino City, Tokio-21,5 Minuten zu Fuß vom Bahnhof Takahata Fudo entfernt,#rutschen#Eisenstange#Schwingen#Sandiger Ort
"public/uploads/post/image/8/hohoemi.jpg ",Smile Park,Die Betonhügel sind ein beliebter Park. Ein Tunnel, der vertikal und horizontal innerhalb des Hügels verläuft, eine Bergsteigerroute mit einem Verschluss außen sowie eine breite Rutsche und ein Sandbereich sind integriert, sodass Sie ein kleines Abenteuer genießen können.,2-31-6, Nanpei, Hino-shi,5 Minuten östlich von der Bushaltestelle Kitano Kaidoguchi,#rutschen#Eisenstange#Schwingen
"public/uploads/post/image/8/hodokubo.jpg ",Unkubo Bezirk Freifläche,Leicht abfallende Wiesen und Wälder. Es gibt keine Spielgeräte, aber Sie können Bäume klettern, Gras rutschen und Eicheln sammeln. Es ist ein Feld, also ist es in Ordnung, mit bloßen Händen herumzugehen.,3-22-2 Kubo, Hino City,5 Minuten zu Fuß östlich von der Tama Animal Park Station auf der Keio Line,#Gras

Zum Zeitpunkt des Starts konnte nicht nur die URL beschrieben werden, aber ** umgekehrt ist es besser, nur die URL ** für CSV-Daten zu schreiben.

Damit ist es uns gelungen, auch mit CSV mehrere Bilder gleichzeitig zu importieren!

Recommended Posts

[Rails 6] Zwei Methoden zur gleichzeitigen Eingabe mehrerer Bilder mit CarrierWave / (1) Eingabe mit anfänglichen Startdaten / (2) Import mit CSV
[Rails] So laden Sie mehrere Bilder mit Carrierwave hoch
Rails6: Geben Sie die Anfangsdaten von ActionText mit seed ein
[Rails] Erste Datenerstellung mit Seed
[Rails] Erste Dateneingabe mit seed_fu!
[Rails] So laden Sie Bilder mit Carrierwave hoch
Ein Skript, das Yaml aus CSV erstellt, um Anfangsdaten in Rails with Fixtures einzufügen
Laden Sie einfach mehrere Bilder mit Rails Rails + Carrierwave + Cloudinary hoch
Erstellen Sie eine EC-Site mit Rails5 seed ~ Startdateneingabe ~
[Schienen] Speichern Sie Bilder mit Carrierwave
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch