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