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がデフォルトで許可しているタグ
多分この辺です。ガイドにも書いてない。
htmlをそのまま表示しなければいけない時にscriptタグとかは許可したくない時に使えます。
rawよりは安全です。