CSVデータの登録
開発の現場では大量のデータを取り扱うため、ExcelでCSVデータを作成し、それをデータベースに一気に投入するという方法がよく使用されています。汎用性の高い技術なので、ぜひ自分で実装できるようにしましょう。
新規に以下の名前のアプリを作成しましょう。
rails new csv_data
次に、データ投入のコードを記述するためのmodelを作成します。
rails g model data_test
modelと同時に作成されたマイグレーションファイルを、以下のように編集しましょう。今回は、name,age,addressの3つカラムを作成し、データ投入を行います。そのため、nameをstring、ageをinteger、addressをstringで作成します。
class CreateDataTests < ActiveRecord::Migration[5.2]
def change
create_table :data_tests do |t|
t.string :name
t.integer :age
t.string :address
t.timestamps
end
end
end
マイグレーションファイルを実行し、データベースにテーブルを作成します。
bundle exec rake db:migrate
lib/tasks/import.rake
にCSVデータをインポートするためのコードを追記します。
require 'csv'
# rake import:users
namespace :import do
desc "Import useers from csv"
task users: :environment do
path = File.join Rails.root, "db/csv/csv_data.csv"
puts "path: #{path}"
list = []
CSV.foreach(path, headers: true) do |row|
list << {
name: row["name"],
age: row["age"],
address: row["address"]
}
end
puts "start to create users data"
begin
User.create!(list)
puts "completed!!"
rescue ActiveModel::UnknownAttributeError => invalid
puts "raised error : unKnown attribute "
end
end
end
次に、データを投入するためのCSVファイルを保管するディレクトリを作成しましょう。db
ディレクトリの中にcsv
ディレクトリを作成し、その中にCSVファイルcsv_data.csv
を用意します。CSVファイルは初回配布データからコピー&ペーストで配置しましょう。CSVファイルには以下のような記述がされています。
name,age,address
hogehoge1,11,hogehoge1
hogehoge2,22,hogehoge2
hogehoge3,33,hogehoge3
hogehoge4,44,hogehoge4
hogehoge5,55,hogehoge5
以下のコマンドを実行
rake import:users
これでデータベースへの登録ができれば、実装は完了です。