LoginSignup
10
9

More than 3 years have passed since last update.

【Rails】seedの作り方について

Posted at

目的

seedを勉強して学んだことをアウトプットしていきます!これからseedを学ぶ方にも参考になればいいなと思います。

seedとは

seedファイルというのは初期データのことです。  
例えば、開発中にデータベースをリセットした場合はデータも全て消えてしまいます。
毎回消えてしまうと登録機能がある場合リセットするたびに毎回データを登録をし直す必要が出てきます。  
すごく面倒ですよね? 
そこで、seedファイルに入れておきたいデータをdb/seeds.rbに記述しておくといちいち作り直さなくて良いってことになります!!!

基本パターン

これでUserのseedデータが一つ作られます。

User.create!(email: "test@example.com",password: "password" )

複数seedデータを作りたい時

これは基本的なRubyのコマンドを使います!emailが同じものにならない様に引数にnを渡しています。n+1にしている理由は、nのみだと0からデータが始まってしまうからです。

10.times do |n|
 User.create!(
   email: "user#{n+1}@example.com",
   password: "password" )
end

関連づけのデータ作成について

例えば、Userとそれに関連したTaskモデルがあったとします。seedデータとしてはUserモデルに関連したTaskを生成するすることにします。そうすると下記の様に記載できます!

User.all.each do |user|
 Task.create!(
  user_id: user.id,
  title: "title",
  memo: "memo",
  color: "red",
  start_date: "2020/5/1",
  end_date: "2020/5/30" )
end

CSVファイルの読み込み方について

CSVファイルを読み込むには下記の様に記載します。"db/csv/masters/init_categories.csv"の部分は自分がファイルを置いているところに寄って変わります。

CSV.foreach("db/csv/masters/init_categories.csv") do |row|
 @categories = Masters::Category.create!(name: row[0])
end

画像挿入について

今回はサンプル画像をアプリ下に用意していたので、そのやり方を下記に記載します。openメソッドを使用して読み込みます。

User.create!(
    image: open("db/images/sample.png"),
    title: "トピック",
    overview: "概要",
    link: "http://origin_job_topic_sample.com" )

ランダムに値を入れたい時

例えば、Userモデルに下記の様に記載されていた時、seedデータを作る時は両方入っているパターンが欲しいですよね?ちなみにenumはuserやadminを数値で格納できる様にしてくれる機能です。

enum user_type: {
    user: 0,
    admin: 1,
  }

そんな時は下記の様に書くとランダムにデータを作ってくれます!これもRubyの基本的な書き方を使っています!

User.create!(
 email: "test@admin.com",
 password: "password",
 status: rand(0..1) )

まとめ

seedも転職前では触った事がなかったのですが、基本的なことは今回で学習できたかなと思います。まだ、学習途中なので新しい知識を得たら随時更新していきたいと思います!!

10
9
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
10
9