LoginSignup
33
37

More than 5 years have passed since last update.

RailsでのCSVデータ投入

Last updated at Posted at 2018-08-07

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

これでデータベースへの登録ができれば、実装は完了です。

33
37
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
37