Strict loading with Rails

Rails implements a feature called strict loading. This feature can help catch potential N+1 queries.

Did you know there are a couple of ways to enable strict loading?

### 1. Per Record

Rails let's you enable strict loading on specific records at runtime:

```ruby
post = Post.first

post.strict_loading! # Enable strict loading
post.strict_loading? # Check if strict loading is enabled on this object
# => true
```

### 2. Per model

Rails let's you enable strict loading on all models of a specific type:

```ruby
class Post < ApplicationRecord
  self.strict_loading_by_default = true

  has_many :comments, dependent: :destroy
end

post = Post.first
post.strict_loading?
# => true
```

### 3. Enable per association basis

Rails let's you define strict loading for specific (or pesky) relations on a model:

```ruby
class Post < ApplicationRecord
  has_many :comments, dependent: :destroy, strict_loading: true
  has_many :likes,    dependent: :destroy, strict_loading: false
end
```

### 4. Application wide

Rails also let's you enable strict loading all across the board when you're brave enough for the nuclear option:

```ruby
# config/environments/development.rb

Rails.application.configure do
# ...
  config.active_record.strict_loading_by_default = true
# ...
end
```

Now that you know your options, you can enable it based on your appetite/distaste for N+1 queries!

douglasgreyling
January 13, 2022