FactoryBotのbuildとcreateの違い
先週ブログを開始してから予想通りというか見事にブログを更新しなかったので
本日より毎日ブログを書いていきます。
FactoryBotについて調べると、インスタンスの作成方法が
カリキュラムではbuildだけど説明サイトではcreateになっていることが多い。
「調べたやり方が実はcreateの場合でしかできなかったらどうしよう」
と思い調べました。
buildの場合はメモリ上にデータを保存し、データベースに保存されない。
なので基本的にはこちらを利用する。
みんながDBにアクセスすると処理が重くなるし、テストデータがDBに残ってしまう。
createの場合はデータベースに保存される。
これはメールアドレスのように一意性があるかどうかをテストしたい時や
保存したデータの個数を数える時などに使う。
しかし調べているうちに気になる記述を発見。
「buildはDB保存しないがアソシエーションはDB保存する」
アソシエーションを保存しない build_stubbedというメソッドも存在することを確認。
buildでググってもアソシエーションについて出てこないので
build_stubbedを用いて検索。
すると
FactoryGirlのbuildとbuild_stubbedって何が違うの? - Qiita
にて、各処理にて何が作成されるのかを確認。ありがたい。
buildするモデルにアソシエーションでUserモデルなどが存在してる時、
buildの場合はアソシエーション先のUserのインスタンスが作成されて保存されてる
という情報。
buildだとアソシエーションがあった場合にDBにアクセスしちゃうんですね。
これを防ぎたい場合にはbuild_stubbedを使う。
勉強になりました。
参考