[Ruby on Rails] seedデータの追加や管理をカンタンにしてくれる「seed-fu」の使い方

Pocket

Rails で、seedデータの追加や管理をカンタンにしてくれるGem「seed-fu」が便利です。

mbleigh/seed-fu はてなブックマーク - mbleigh/seed-fu

seed-fu | RubyGems.org | your community gem host はてなブックマーク - seed-fu | RubyGems.org | your community gem host

seed-fuで始める効率的なRails Seed管理 – 酒と泪とRubyとRailsと はてなブックマーク - seed-fuで始める効率的なRails Seed管理 - 酒と泪とRubyとRailsと

使い方は、db/fixtures 以下に users.rb とかいうファイル名で、簡単には下記のような感じで書く。

■ db/fixtures/users.rb

User.seed do |s|
  s.id    = 1
  s.login = "jon"
  s.email = "jon@example.com"
  s.name  = "Jon"
end
 
User.seed do |s|
  s.id    = 2
  s.login = "emily"
  s.email = "emily@example.com"
  s.name  = "Emily"
end

全ての seed ファイルからインポートするには、単に

rake db:seed_fu

を実行すれば良い。

ファイルやモデル別にロードするには、下記のような感じで rake タスクを実行する。

rake db:seed_fu FIXTURE_PATH=path/to/fixtures
rake db:seed_fu FILTER=users,articles

当然だがRubyコードが書けるので、こんな感じにCSVからDBへインポートみたいなことも書ける。

■ db/fixtures/users.rb

require 'csv'
 
csv = CSV.read('db/fixtures/users_master.csv')
 
csv.each_with_index do |user, i|
  # skip a label row
  next if i === 0
 
  name = user[0]
  age  = user[1].to_i
 
  User.seed do |s|
    s.id   = i
    s.name = name
    s.age  = age
  end
end

地味に便利だ。

  1. コメントはまだありません。

  1. トラックバックはまだありません。