LoginSignup
0
0

More than 1 year has passed since last update.

seedを使って、DBにデータをインポートする

Last updated at Posted at 2021-04-30

seedファイルとは

seedファイルは、初期データをDBに入れる時に使うファイルのことです。
何かのアプリを作成する場合に、作成したDBにデータ(ユーザ登録データなど)を入れる際に使います。
1件づついれる方法もあれば、CSVファイルなどでデータをまとめてインポートすることもできるので、何かと重宝するファイルです。
この記事では、私が学習した基本的なseedの使い方とCSVファイルをインポートする方法をアウトプットしていきます。
なお、テーブルの作成やマイグレーションファイルの作成方法などは省略します。

学習環境

MacOS BigSur
Ruby 2.6.5
Ruby on rails 6.0.3.6
Mysql 5.6.51

基本形

ここでは、「Hansoku」という名前のモデルを作成しており、マイグレーションファイルには、

20210416141031_create_hansokus.rb
class CreateHansokus < ActiveRecord::Migration[6.0]
  def change
    create_table :hansokus do |t|
      t.string :hansoku_name,           null: false
      t.integer :damage,                null: false
      t.string :status,                 null: false
      t.timestamps
    end
  end
end

と記載しているとします。
そのモデルに対して、カラム名に応じて、保存したい値をseed.rbに以下のようにcreateメソッドの引数に保存したい値を定義してあげます。

seed.rb
Hansoku.create(
  :hansoku_name => "金テキ", 
  :damage => 100, 
  :status => "動けない"
)

この形が基本的な形です。
個別に複数作成する場合は、配列形式にしてやり、

seed.rb
Hansoku.create[(
  :hansoku_name => "金テキ", 
  :damage => 100, 
  :status => "動けない"
),(
  :hansoku_name => "目つぶし", 
  :damage => 60, 
  :status => "動けない"
)]

などと記載してあげます。

CSVファイルをインポートする

次に、大量のデータをDBに初期データとして導入する方法として、CSVファイルをインポートする方法があります。
seedファイルにCSVファイルを読み込み、DBにインポートするのです。

require 'csv'

CSV.foreach('db/hansoku.csv', encoding: 'Shift_JIS:UTF-8') do |hansoku|
  Hansoku.create(
    :hansoku_name => hansoku[0], 
    :damege => hansoku[1], 
    :status => hansoku[2], 
  )
end

標準ライブラリのCSVライブラリを呼び出し、.foreachメソッドforeachメソッドについてはこちらを使用します。
このメソッドは、CSVファイルの各行がブロック変数に渡され、モデルに定義したカラムを「,」区切りのCSVファイルの左から順番に配列の添字で指定することができます。
上記コードで説明すると、

:hansoku_name => hansoku[0], 
  # インポートするCSVファイルの最初のカラムはモデルの「:hansoku_name」へ
:damage => hansoku[1], 
  # インポートするCSVファイルの2番目のカラムはモデルの「:damage」へ
:status => hansoku[2] 
   # インポートするCSVファイルの3番目のカラムはモデルの「:status」へ

といった感じでインポートされることになります。
なお、CSVファイルは指定されていないと文字コードのエンコード方式がshift-jisになっているので、エンコーディングが必要な場合は、変換させないとエラーが発生します。

最後にこのコマンド

seedファイルに記載した後は、

rails db:seed

のコマンドを実行してあげると、seedに書かれた内容をDBに反映させることができます。

0
0
0

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
0
0