diff --git a/README.md b/README.md index b4378e3..1721a5a 100644 --- a/README.md +++ b/README.md @@ -229,6 +229,7 @@ _351 TILs and counting..._ - [Show Pending Migrations](rails/show-pending-migrations.md) - [Show Rails Models With Pry](rails/show-rails-models-with-pry.md) - [Show Rails Routes With Pry](rails/show-rails-routes-with-pry.md) +- [Truncate Almost All Tables](rails/truncate-almost-all-tables.md) ### Ruby diff --git a/rails/truncate-almost-all-tables.md b/rails/truncate-almost-all-tables.md new file mode 100644 index 0000000..cd23796 --- /dev/null +++ b/rails/truncate-almost-all-tables.md @@ -0,0 +1,19 @@ +# Truncate Almost All Tables + +The +[`database_cleaner`](https://github.com/DatabaseCleaner/database_cleaner) +gem is a handy way to make sure you have a consistent database context for +each test example or suite. One `database_cleaner` strategy that can be used +is the `truncation` strategy. This truncates the data from all the tables by +default. This is not ideal for *fixed* tables that contain domain-specific +data because you end up having to do way more test setup than should be +necessary. Fortunately, specific tables can be excepted by the truncation +strategy using the `except` option. + +For instance, if we have a standard set of roles for users of our +application, we can except that table from truncation with a line like the +following in our `rails_helper.rb` file: + +``` +DatabaseCleaner.strategy = :truncation, {:except => %w[roles]} +```