Railsのseedで初期データを投入する方法




 

Railsアプリを作っていると、たまに

データベースに「ドバッ」と初期データを投入したい時

ありますよね?

ぼく自身、経験値でレベルが上がるポケモンのようなアプリを作ろうとしています。

レベルアップの閾値のテーブルを作って、それをデータベースに流し込む必要が出てきたのです。

 

そんな時に活躍するのが

seed.rb

というファイル。

 

Railsのseedファイルとは??

seed.rbは、自分で新たに生み出す必要はありません。

Railsアプリにデフォルトで入っているファイル。

場所は、

「dbフォルダ」に入っています。

seed.rbには

# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
#
# Examples:
#
#   movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
#   Character.create(name: 'Luke', movie: movies.first)

と書いてありますが、すべてコメントアウトされているただの説明文です。

実質、空っぽの状態なので、何か書かなければ機能しないようですね。

seed.rbに中身を追加し、データベースを変更します。

 

seedの使い方は、次の2つ。

  1. データを1つずつ追加
  2. CSVで一気にデータを追加

 

 

データを1つずつ追加

まずは基本技です。

データベースに1つずつデータを追加する方法を見ていきましょう。

 

seedファイルを編集

seed.rbに次の文言を追加してください。

モデル名.create(カラム名1: データ1, カラム名2: データ2, .......)

 

例えば、Userモデルに

  • nameカラム:taro
  • emailカラム:taro@jiro.com

を追加したいとき。

そういった場合、

User.create(name: 'taro', email: 'taro@jiro.com')

をseedファイルの末尾に追記し、上書き保存。

 

データベースに反映

seedファイルを編集し終わったら、データベースに変更内容を反映させるだけ。

反映させるコマンドは、

$ rails db:seed

です。

マイグレーションファイルを実行する時はrails db:migrateでしたが、今回はseedファイルなので、migrateがseedになるのですね。

いやあ、すごい。

たったこれだけでデータベースに初期データを追加できるとは。

 

CSVファイルを使って一気にデータを追加

次は、データを1つずつじゃなくて、ドバッと一気に追加する方法です。

 

CSVファイルを作成

まずはCSVファイルを作りましょう。

スプレッドシートでデータベースの列に追加したいデータを入力します。
Image from Gyazo
例えば、nameカラムとemailカラムだったら、A列にname、B列にemailの値を記入すりゃいいですね。

なお、データ以外に説明のラベルは含まず、本当にデータだけかくといいですよ。

 

データの記入が終わったら、CSVでエクスポート。

ファイル>ダウンロード

と進んで

カンマ区切りの値(.csv、現在のシート)

を選びます。

今回は例としてsample.csvで保存。
Image from Gyazo

 

 

CSVファイルをデータベースの中に移動

先ほど保存したCSVファイル(sample.csv)をRailsアプリの中に入れます。

格納場所はseed.rbと同じく、dbフォルダ内ですね。

 

seedファイルを編集する

seedファイルへ次のように記載してみてください。

require "csv"
 
CSV.foreach('db/ファイル名') do |info|
  モデル名.create(:カラム1 => info[0], :カラム2 => info[1])
end

今回の例では、ファイル名は「sample.csv」なので

require "csv"
 
CSV.foreach('db/sample.csv') do |info|
  User.create(:name => info[0], :email => info[1])
end

になりますね。

 

データベース反映

さあ、最後はデータベースに反映させます。

$ rails db:seed

ですね。

CSVに追加したデータを、指定したデータベースに初期投入できます。

 

 

さあ、Railsのseedを使ってみよう

いやー、すごいっす。

Rails内のseed.rbの存在には気づいていて、なんとなく知っていました。

しかし、こんな使い方をするファイルだとは思いませんでしたね。

何かの「種」として認識していましたから。

とんでもなく恥ずかしい、というかseedに失礼でした。

 

Railsアプリを作る時は初期データが必要な時もあります。

そういった時はseedファイルで初期データを追加しましょう。

 

それでは!

Lin




音生入力で楽にブログを書く技が満載!
ブログ音声入力術

音声入力の使い方から文章を書くコツまで完全網羅。ブログを書きたいすべての人向けの電子書籍