LoginSignup
1
0

More than 3 years have passed since last update.

Fakersでダミーの注文データを作る(Ruby on Rails、seeds)

Posted at

やりたいこと

社内研修で、ウォーターサーバーの替えのボトルの在庫を見張って自動発注するというプチIoTシステムをRailsで開発しています。

Railsで注文データのダミーを作りたかったのですが、調べても意外にそれっぽいハウツーに出会えなかったのでメモ。(自分のぐぐり力不足?)

ちなみに、注文モデル(order.rb)には以下のカラムがあります。

カラム データ型
delivery_date date 納品日
qty integer 注文数
order_date date 注文した日付
status integer 0: 注文済み、1: 納品済み
created_at datetime
updated_at datetime
item_id bigint 注文アイテムの外部キー
user_id bigint 注文したユーザーの外部キー

ちなみに、環境。
Rails6.0.3, macOS Catalina 10.15.7

実装!

今回はFakerというgemを活用して、ダミーの注文データを30個生成します。
(gemとは?=>Railsをさらに便利にしてくれるライブラリ(=拡張機能=オプション機能=カスタマイズ機能)みたいなやつ)
Fakerそのもののインストールの仕方に関してはネットにたくさん記事があるので割愛します。

seeds.rb
# 最新の注文は個別で作る
order_date = Faker::Date.between(from: 5.days.ago, to: Date.today)
Order.create(
  order_date: order_date,
  qty: Faker::Number.between(from: 1, to: 10),
  delivery_date: order_date + 3, # 納品日は注文日の3日後としておく。下に詳述。
  status: 0,
  user_id: 2,
  item_id: 1)

# 残り29個はランダムで生成してもらう
29.times do
  order_date = Faker::Date.between(from: 1.year.ago, to: 10.days.ago)
  Order.create(
    order_date: order_date,
    qty: Faker::Number.between(from: 1, to: 10),
    delivery_date: order_date + 3,
    status: 1,
    user_id: Faker::Number.between(from: 1, to: 2),
    item_id: Faker::Number.between(from: 1, to: 3)
  )
end

↑コードを見れば何をしたいか大体わかると思うので、解説は加えません。
これ以外の実装がしたい場合は、Fakerはその辺のチュートリアル記事よりも、本家に当たるのが吉でしたのでこちらを参照すると良いと思います。
Fakerドキュメント https://github.com/faker-ruby/faker#faker
Faker::Date https://github.com/faker-ruby/faker/blob/master/doc/default/date.md#fakerdate

ちなみに、当初、delivery_dateもFakerしようと思ったのですが、そうすると、delivery_date(納期)がorder_date(注文日)よりも前になってしまうなど整合性が取れないデータが発生することを懸念し、order_date + 3 という計算にしました。

余談ながら、この計算方法(文法)で合っているかは、ターミナルでrails db:seedする前に、rails consoleで確認できることを発見!↓

% rails console   
Running via Spring preloader in process 48085
Loading development environment (Rails 6.0.3)
irb(main):001:0> order_date =  Faker::Date.between(from: 1.year.ago, to: 10.days.ago)
=> Tue, 09 Jun 2020
irb(main):002:0> order_date + 15
=> Wed, 24 Jun 2020
irb(main):003:0> 

生成!

ターミナルでrails db:seedすると下記のようにデータが生成されました!↓

スクリーンショット 2021-04-13 13.10.55.png

最後に

何かご指摘やもっといい方法などあればぜひ教えてください。
ありがとうございます。

1
0
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
1
0