It is easy to insert multiple other text columns, but I had a hard time because all of the image columns became nil, so here are two methods to input multiple image columns at once. I will.
In db / migrate / seed.rb
,
seed.rb
Post.create!(image: /public/uploads/post/image/1/yatoguti.jpg,
park:Yatoguchi Park,
outline:Everyone in Hodokubo knows,
location:1-20-14 Hodokubo, Hino-shi, Tokyo,
access:5 minutes walk from Hodokubo Monorail Station)
And then rails db: reset
, then rails db: seed
,
=> [#<Post:0x00007fa6c66bc8e8
id: 27,
image: nil,
park: "Yatoguchi Park",
outline:
"Everyone in Hodokubo knows.",
location: "10 minutes walk from Takahatafudo Station on the Keio Line toward Mogusaen 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: ["#Playing in the water", "#Athletic"]>,
#<Post:0x00007fa6c7b48f28
id: 28,
image: nil,
park: "Rainmaking Park",
outline: "It is a park that has both brightness and a calm atmosphere.",
location: "8 of 881 Mogusa, Hino City",
access: "3 minutes walk east from Misawadai Elementary School bus stop",
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...
In this way, the ** image column becomes nil ** if only the URL is described directly.
Rewrite the description of the image URL in the image column as follows.
seed.rb
Post.create!(image: File.open("#{Rails.root}/public/uploads/post/image/1/yatoguti.jpg "),
park:Yatoguchi Park,
outline:Everyone in Hodokubo knows,
location:1-20-14 Hodokubo, Hino-shi, Tokyo,
access:5 minutes walk from Hodokubo Monorail Station)
The description of the image column,
Post.create!(image: /public/uploads/post/image/1/yatoguti.jpg,
not,
Post.create!(image: File.open("#{Rails.root}/public/uploads/post/image/1/yatoguti.jpg "),
Change to. Then rails db: reset
and then rails db: seed
.
/image/1/yatoguti.jpg
.With this, the seed initial data can be input all at once!
Since the initial data input was successful in seed.rb, this time, write in the same way with db / csv_dara / csv_data.csv
and lib / tasks / import_csv.rake
, and try 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,It is a small park right next to "Takahatafudo" in Hino City. Located on a hill in the housing complex, it is a place of relaxation for local children. There are swings, slides, horizontal bars, sandboxes, and there is also a space where you can play freely.,714 Takahata, Hino City, Tokyo-21,5 minutes walk from Takahatafudo Station,#slide#Horizontal bar#Swing#Sandbox
File.open("#{Rails.root}/public/uploads/post/image/8/hohoemi.jpg "),Hohoemi Park,The concrete mound is a popular park. A tunnel that runs vertically and horizontally in the small mountain, a mountain climbing route with a clasp on the outside, and a wide slide and sandbox are integrated, so you can enjoy a little adventure.,2-31-6, Minamidaira, Hino-shi,5 minutes east from the Kitano Kaidoguchi bus stop,#slide#Horizontal bar#Swing
File.open("#{Rails.root}/public/uploads/post/image/7/hodokubo.jpg "),Hodokubo District Square,Slightly sloping grasslands and thickets. There are no playground equipment, but you can enjoy climbing trees, sliding grass, and picking up acorns. It's barefoot, so it's okay to go barefoot.,3-22-2 Hodokubo, Hino City,5 minutes walk east from Tama Animal Park Station on the Keio Line,#grass
lib/tasks/import_csv.rake
require 'csv'
namespace :import_csv do
desc "Task to import CSV data of post table"
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 "Start import process"
Post.create!(list)
puts "Import complete!!"
end
end
I thought that CSV import would be possible because it was described that the seed was initially input. Then ...
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)
Cannot import due to an error. Since I originally imported without the image column, there is no doubt that the image column is the problem.
Unlike the case of seed, CSV is treated as ** all character strings **, so the description is different.
Therefore, rewrite lib / tasks / import_csv.rake
and db / csv_dara / csv_data.csv
as follows.
import_csv.rake
require 'csv'
namespace :import_csv do
desc "Task to import CSV data of post table"
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 "Start import process"
Post.create!(list)
puts "Import complete!!"
end
end
ʻImport_csv.rake` image column description,
image: row ["image"],
not,
image: File.open("#{Rails.root}/#{row["image"]}"),
Change to.
Then, change the image column of csv_data.csv
as follows.
csv_data.csv
image,park,outline,location,access,tag_list
"public/uploads/post/image/8/fuyou.jpg ",Fuyo Park,It is a small park right next to "Takahatafudo" in Hino City. Located on a hill in the housing complex, it is a place of relaxation for local children. There are swings, slides, horizontal bars, sandboxes, and there is also a space where you can play freely.,714 Takahata, Hino City, Tokyo-21,5 minutes walk from Takahatafudo Station,#slide#Horizontal bar#Swing#Sandbox
"public/uploads/post/image/8/hohoemi.jpg ",Hohoemi Park,The concrete mound is a popular park. A tunnel that runs vertically and horizontally in the small mountain, a mountain climbing route with a clasp on the outside, and a wide slide and sandbox are integrated, so you can enjoy a little adventure.,2-31-6, Minamidaira, Hino-shi,5 minutes east from the Kitano Kaidoguchi bus stop,#slide#Horizontal bar#Swing
"public/uploads/post/image/8/hodokubo.jpg ",Hodokubo District Square,Slightly sloping grasslands and thickets. There are no playground equipment, but you can enjoy climbing trees, sliding grass, and picking up acorns. It's barefoot, so it's okay to go barefoot.,3-22-2 Hodokubo, Hino City,5 minutes walk east from Tama Animal Park Station on the Keio Line,#grass
At the time of seed, it failed to describe only the URL, but ** conversely, it is better to write only the URL ** for CSV data.
With this, we succeeded in importing multiple images at once even in CSV!
Recommended Posts