seedを使って、DBにデータをインポートする
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」という名前のモデルを作成しており、マイグレーションファイルには、
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メソッドの引数に保存したい値を定義してあげます。
Hansoku.create(
:hansoku_name => "金テキ",
:damage => 100,
:status => "動けない"
)
この形が基本的な形です。
個別に複数作成する場合は、配列形式にしてやり、
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に反映させることができます。
Author And Source
この問題について(seedを使って、DBにデータをインポートする), 我々は、より多くの情報をここで見つけました https://qiita.com/hirokun0204/items/3f1bb0f85f1faca81d22著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .