seed_fuとは
seed-fuは、すでに存在しているが変更したいレコードだけ更新したり、ファイル単位で実行できたり、簡単に書けるようなシンタックスシュガーがあったりと便利なgemです。
##使い方
1.Gemfileに以下を記述する。
gem 'seed-fu'
合わせてこちらも実行する。
$ bundle install
- 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')