rails seedを冪等性にする。sanitizeがデフォルトで許可しているタグ

rails 6.1 ruby 3.0

seedを冪等性にする

docker compose upなどでbin/rails db:seedを実行する環境などで何度実行されても同じ結果にしたいと思いました。

ActiveRecord::Base.connection.disable_referential_integrity do
  ActiveRecord::Base.connection.execute("TRUNCATE users")
  User.create(name: "user1")
end

TRUNCATEでidも元に戻るので、create時に指定しなくても大丈夫です。

プロジェクトのみんなからはそんなに好意的な意見は聞かれなかったので、とりあえずではあります。

docker起動時のコマンドを改善した方がいい気はする。

find_or_create_byは?

db:seedの後で、どこかのカラムを変更し、もう一度db:seedするときに、idを指定するとduplicateになり、指定しないと似たようなレコードがもう1レコードできてしまいます。

sanitizeがデフォルトで許可しているタグ

多分この辺です。ガイドにも書いてない。

github.com

htmlをそのまま表示しなければいけない時にscriptタグとかは許可したくない時に使えます。

rawよりは安全です。