seeds.rbでデータ投入する際、createよりもcreate!を使うべき?

Railsアプリケーションで、初期データを投入する方法として、「'seeds' feature」というものがあります。 db/seeds.rbファイルにRubyコードを書き、rake db:seedを実行することで利用できます。

先日とあるアプリケーションにて次のようなことが起こりました。

  • seeds.rbにてcreateでデータを投入していた
  • modelに変更を加えたので、seed.rbを修正
  • 修正後、rake db:seedを実行、特にエラーも無く正常終了
  • ところが、結果のデータを見ると、あるべきデータが投入されていない。

そこで、createをcreate!に変更してみたところ、validationエラーでデータ投入が失敗していることがわかりました。 modelの変更に伴い、createで指定するパラメータの追加が必要だったのですが、指定方法に誤りがあり、validationで失敗してデータが投入されていなかった、というわけです。

createとcreate!の違い

create、save、updateは、validationに失敗した場合にfalseを返します。それに対して、 create!、save!、update!、はvalidationに失敗した場合にActiveRecord::RecordInvalid例外を発生します。

参考 Active Record の基礎 | Rails ガイド

というわけで

以上のことから、seeds.rbでデータ投入する際、データ投入が失敗していることを検出するために、createよりもcreate!を使うべきでは、と思ったのですが、どうなんでしょう。 こう変えた時にデメリットあるのでしょうか。

追記

Railsチュートリアルにも記載がありました。 http://railstutorial.jp/chapters/updating_and_deleting_users?version=4.2#code-db_seed