Ruby
Rails

Seed Fuを使って複数のデータ、中間テーブルのデータを作成する

Seed Fu

Seed Fuは、シードデータを扱いやすくするGem
Seed FuのGitHub

使い方

簡単に使い方の説明をしておくと

準備

まず、dbディレクトリにfixturesディレクトリを作成し、この下にSeed Fuのファイルを置いていく。
環境ごとに実行するファイルを分けたい場合は、fixtures以下にdevelopmentなど環境ごとのディレクトリを作成して、その下にファイルを置く。
db/fixtures以下または、fixtures/環境を示すディレクトリ以下にusers.rbなどのシードファイルを作成する。
これで準備はOK

ファイルを作成し、シードの内容を記述する

ユーザーのシードデータを作成する記述は以下の用に書く。

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

Seed Fuを実行する

シードの準備ができたら、ターミナルからコマンドを実行する。

rake db:seed_fu

特定のファイルだけ実行することもできる。

rake db:seed_fu FILTER=users # users.rbだけを実行する

以上で基本的な使い方は終わり(´ω`)

複数のシードを作成する

ここからが本題。
自分の場合は、複数のデータを作りたいことが多いので、このようにしている。
ダミーデータを作成するFakerと組み合わせるとよりリアルなデータが作成できる。

10.times {
  User.seed do |s|
    s.name = Faker::Name.name
  end
}

中間テーブルのデータをいれる

has_and_belongs_to_manyを使ってアソシエーションを組んだテーブルに値をいれる。
ユーザーとグループの関係を考えたときに、ユーザーは複数のグループに所属でき、グループは複数のユーザーを所持するといった関係を例とする。
自分はこのようにして、中間テーブルにも値を入れることができた。
ユーザーのデータを先に10個ほどシードで作成しているとする。

Group.seed do |s|
  s.name = Faker::Name.name
  s.users = [User.find(1), User.find(2), User.find(3)]
end

先程紹介したtimesと組み合わせることで複数作成することが多い。