LoginSignup
5
6

More than 5 years have passed since last update.

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

Posted at

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と組み合わせることで複数作成することが多い。

5
6
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
5
6