じぶんメモ

プログラミングのメモ、日常のメモとか。

seedsを使ったテーブルへのデータINSERT

Railsでテーブル作成後、seedsファイルを使用したデータの登録手順を記載する。

1.seedsファイルにseed対象のファイルを追加

seedsファイルに直接テーブルの作成ロジックを記載しても問題ないが、
テーブルの数が多くなった時に管理が煩雑になるので、テーブルごとにseedファイルを分け、
seedsファイルには各テーブルのseedファイルをrequireすると、いい感じになる。

db/seeds.rbに以下の内容を追記。

# dbディレクトリ以下のseedファイルを実行
table_names = %w(live_houses)
table_names.each do |table_name|
    path = Rails.root.join('db', 'seeds', Rails.env, "#{table_name}.rb")
    if File.exist?(path)
        puts "Creating #{table_name}..."
        require(path)
    end
end

2.各テーブルのseedファイルの作成

db/seeds/developmentディレクトリを作成し、各テーブルのseedファイルを作成する。

例)live_houses.rbを作成

# coding: utf-8
# 日本語を使用する際はutf-8を指定

#ライブハウステーブルへのINSERT
LiveHouse.create(
    :name => 'QBハウス',
    :search_key1 => "きゅーびーはうす",
    :search_key2 => "QB",
    :zip_code => "000-0000",
    :prefecture => "東京都",
    :city => "XX区",
    :address => "3-3-3"
    )

LiveHouse.create(
    :name => 'BBQハウス',
    :search_key1 => "きゅーびーはうす",
    :search_key2 => "QB",
    :zip_code => "000-0000",
    :prefecture => "東京都",
    :city => "XX区",
    :address => "3-3-3"
    )

# 以下INSERTしたいレコード数分続く

3.rake:seedを実行

tomy2002:~/workspace $ rake db:seed

4.確認とやり直す場合

正しくデータが投入されたか調べるには、以下のコマンドで確認。

rails r 'puts LiveHouse.count'

やり直したい場合はdb:resetを実行すると、db/scheme.rbの内容を読み込み、
データベースの構造を作り直して、再度seedデータを投入してくれる。