0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]seed_fuで初期データ投入!

Posted at

seed_fuとは

seed-fuは、すでに存在しているが変更したいレコードだけ更新したり、ファイル単位で実行できたり、簡単に書けるようなシンタックスシュガーがあったりと便利なgemです。

使い方

1.Gemfileに以下を記述する。


gem 'seed-fu'

合わせてこちらも実行する。


$ bundle install
  1. seed ファイルを置くディレクトリを作成する。
    ※db/fixture 以下の seed ファイルはアルファベット順に読み込まれます。読み込む順番を指定する必要がある時はファイル名の始めに数字を入れましょう。

# 必ず必要なディレクトリ
db/fixtures

# 環境ごとに異なるデータを作成する
db/fixtures/development
db/fixtures/production

3.db/fixturesに以下にseedファイルを作成します。

01_category.rb

Category.seed do |c|
  c.id = 1
  c.name = 'HTML'
end

Category.seed do |c|
  c.id = 2
  c.name = 'CSS'
end

Category.seed do |c|
  c.id = 3
  c.name = 'Ruby'
end

4.seed_fu コマンドを実行する。


$ rails db:seed_fu

小技集

seed_onceを使う

一度データを作成した後は更新したくない場合、 seed_onceを使います。


Category.seed_once do |s|
  s.id = 1
  s.name = 'HTML'
end

シンタックスシュガー

seedファイルを作成する時は、これまでのような記述の他に以下のように記述することが出来る。


Category.seed(:id,
 { id: 1, name: 'HTML' },
 { id: 2, name: 'CSS' },
 { id: 3, name: 'Ruby' },
)

CSVファイルからデータを作成

※要素をカンマで区切る。(ここでは、id、nameの順)

db/fixtures/development/category.csv

1,HTML
2,CSS
3,Ruby

CSVから読み込む処理を書く。

db/fixtures/development/01_category.rb

require 'csv'

csv = CSV.read('db/fixtures/development/category.csv')
csv.each do |category|
 Category.seed do |s|
  s.id = category[0] # ここではid
  s.name = category[1] # ここではname
 end
end

最後に以下のコマンドを実行


$ rails db:seed_fu

ユーザー作成

seed_fuではパスワードがうまく設定されないのでデフォルトのseedでする。

db/fixtures/development/00_user.rb

User.create!(id: 1, name: 'yuh', email: 'sample@test.com',
password: 'password', password_confirmation: 'password')
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?