🤖
seedデータで日時を入れて作成
パRailsのイベント登録アプリを作成した際、初期データを自分なりに作成してみた
eventテーブルのカラム
- owner_id(イベント作成者)
- name(イベント名)
- place(イベント開催場所)
- start_at(イベント開始時間)
- end_at(イベント終了時間)
初期データ作成の条件としては、
- イベント開始時間は現在より未来の日時でないと一覧に表示されない
- イベント終了時間は開始時間より未来の日時でないとバリデーションがかかる
seedデータ作成
今回はeventテーブルのデータだけ簡単に作成したかったので、db/seed.rb
に記述
いろいろ便利な機能を使いたい場合はseed_fuのgemを使う方がいい
db/seed.rb
20.times do |n|
start_start_day = Date.new(2022, 8, 15)
start_end_day = Date.new(2022, 8, 31)
end_start_day = Date.new(2023, 8, 15)
end_end_day = Date.new(2023, 8, 31)
Event.create(
owner_id: 1,
name: "test#{n}",
place: "test_place#{n}",
start_at: Random.rand(start_start_day..start_end_day),
end_at: Random.rand(end_start_day..end_end_day),
content: "test_content#{n}"
)
end
(変数の命名が最悪なことは一旦置いておいて…)
start_start_day = Date.new(2022, 8, 15)
start_end_day = Date.new(2022, 8, 31)
この部分で、start_atカラムに入る日時の範囲を決める
end_start_day = Date.new(2023, 8, 15)
end_end_day = Date.new(2023, 8, 31)
同様に、この部分でend_atカラムに入る日時の範囲を指定
start_atに入る日時より先の日時が入るように指定
start_at: Random.rand(start_start_day..start_end_day)
start_start_day
で定義した2022-8-15からstart_end_day
で定義した2022-8-31の間でランダムな日時を取得
end_at: Random.rand(end_start_day..end_end_day)
こちらも同様
これで、seedデータが日時を含めて作成できた
補足
prng.rand(Time.new(2012, 1, 1) ... Time.new(2013,1,1)) # => 2012-02-25 03:11:42 +0900
Date.new
ではなくTime.new
で定義すれば、時間まで取得できたっぽい?
Discussion