diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 5d21adfbf535cebe1a1d45c985dd5dda4b3cadf2..fe22385a7ff3d84cf7ffcbf12bbf89e648e6aa3e 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1348,19 +1348,6 @@ Rails/I18nLocaleTexts:
     - 'lib/tasks/mastodon.rake'
     - 'spec/helpers/flashes_helper_spec.rb'
 
-# Configuration parameters: IgnoreScopes, Include.
-# Include: app/models/**/*.rb
-Rails/InverseOf:
-  Exclude:
-    - 'app/models/appeal.rb'
-    - 'app/models/concerns/account_interactions.rb'
-    - 'app/models/custom_emoji.rb'
-    - 'app/models/domain_block.rb'
-    - 'app/models/follow_recommendation.rb'
-    - 'app/models/instance.rb'
-    - 'app/models/notification.rb'
-    - 'app/models/status.rb'
-
 # Configuration parameters: Include.
 # Include: app/controllers/**/*.rb, app/mailers/**/*.rb
 Rails/LexicallyScopedActionFilter:
diff --git a/app/models/appeal.rb b/app/models/appeal.rb
index 6fbf60b39e172b87c063591fe4565d44e38767b4..f1290ad01a556a34b41cb6c095fe5a33ccb469a8 100644
--- a/app/models/appeal.rb
+++ b/app/models/appeal.rb
@@ -19,7 +19,7 @@ class Appeal < ApplicationRecord
   MAX_STRIKE_AGE = 20.days
 
   belongs_to :account
-  belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id'
+  belongs_to :strike, class_name: 'AccountWarning', foreign_key: 'account_warning_id', inverse_of: :appeal
   belongs_to :approved_by_account, class_name: 'Account', optional: true
   belongs_to :rejected_by_account, class_name: 'Account', optional: true
 
diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb
index 48ab1349dd37dd674e6273d7e1725caa168d35ae..b2ccddef322c6a0fe34bbca62bbbcff100b604fd 100644
--- a/app/models/concerns/account_interactions.rb
+++ b/app/models/concerns/account_interactions.rb
@@ -81,8 +81,10 @@ module AccountInteractions
     # Follow relations
     has_many :follow_requests, dependent: :destroy
 
-    has_many :active_relationships,  class_name: 'Follow', foreign_key: 'account_id',        dependent: :destroy
-    has_many :passive_relationships, class_name: 'Follow', foreign_key: 'target_account_id', dependent: :destroy
+    with_options class_name: 'Follow', dependent: :destroy do
+      has_many :active_relationships,  foreign_key: 'account_id', inverse_of: :account
+      has_many :passive_relationships, foreign_key: 'target_account_id', inverse_of: :target_account
+    end
 
     has_many :following, -> { order('follows.id desc') }, through: :active_relationships,  source: :target_account
     has_many :followers, -> { order('follows.id desc') }, through: :passive_relationships, source: :account
@@ -91,15 +93,19 @@ module AccountInteractions
     has_many :account_notes, dependent: :destroy
 
     # Block relationships
-    has_many :block_relationships, class_name: 'Block', foreign_key: 'account_id', dependent: :destroy
+    with_options class_name: 'Block', dependent: :destroy do
+      has_many :block_relationships, foreign_key: 'account_id', inverse_of: :account
+      has_many :blocked_by_relationships, foreign_key: :target_account_id, inverse_of: :target_account
+    end
     has_many :blocking, -> { order('blocks.id desc') }, through: :block_relationships, source: :target_account
-    has_many :blocked_by_relationships, class_name: 'Block', foreign_key: :target_account_id, dependent: :destroy
     has_many :blocked_by, -> { order('blocks.id desc') }, through: :blocked_by_relationships, source: :account
 
     # Mute relationships
-    has_many :mute_relationships, class_name: 'Mute', foreign_key: 'account_id', dependent: :destroy
+    with_options class_name: 'Mute', dependent: :destroy do
+      has_many :mute_relationships, foreign_key: 'account_id', inverse_of: :account
+      has_many :muted_by_relationships, foreign_key: :target_account_id, inverse_of: :target_account
+    end
     has_many :muting, -> { order('mutes.id desc') }, through: :mute_relationships, source: :target_account
-    has_many :muted_by_relationships, class_name: 'Mute', foreign_key: :target_account_id, dependent: :destroy
     has_many :muted_by, -> { order('mutes.id desc') }, through: :muted_by_relationships, source: :account
     has_many :conversation_mutes, dependent: :destroy
     has_many :domain_blocks, class_name: 'AccountDomainBlock', dependent: :destroy
diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb
index 3d7900226dcd114be0389459f8c76cc0d6643f45..f66353fadd086d7fe8bd316cc59b78151d1d68b2 100644
--- a/app/models/custom_emoji.rb
+++ b/app/models/custom_emoji.rb
@@ -36,7 +36,8 @@ class CustomEmoji < ApplicationRecord
   IMAGE_MIME_TYPES = %w(image/png image/gif image/webp).freeze
 
   belongs_to :category, class_name: 'CustomEmojiCategory', optional: true
-  has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode
+
+  has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode, inverse_of: false
 
   has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set modify-date +set create-date' } }, validate_media_type: false
 
diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb
index fbb045416c400286bc178dec99d98cdb4ea73e3c..06d35d8beef59d966679db8a2fd3f90d2e80e1e5 100644
--- a/app/models/domain_block.rb
+++ b/app/models/domain_block.rb
@@ -25,7 +25,7 @@ class DomainBlock < ApplicationRecord
 
   validates :domain, presence: true, uniqueness: true, domain: true
 
-  has_many :accounts, foreign_key: :domain, primary_key: :domain
+  has_many :accounts, foreign_key: :domain, primary_key: :domain, inverse_of: false
   delegate :count, to: :accounts, prefix: true
 
   scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb
index 602d329858c06bd1f78daa637f46d031315aab8c..123570b1243ffd2271eb341599dbdbc2ad99505e 100644
--- a/app/models/follow_recommendation.rb
+++ b/app/models/follow_recommendation.rb
@@ -12,7 +12,7 @@
 class FollowRecommendation < ApplicationRecord
   self.primary_key = :account_id
 
-  belongs_to :account_summary, foreign_key: :account_id
+  belongs_to :account_summary, foreign_key: :account_id, inverse_of: false
   belongs_to :account
 
   scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) }
diff --git a/app/models/instance.rb b/app/models/instance.rb
index 1f96d3728623249b734f83e9b56e3aa4914be669..95231c52a7ec013c0e56d39fd4288fccdf4ac95b 100644
--- a/app/models/instance.rb
+++ b/app/models/instance.rb
@@ -13,11 +13,13 @@ class Instance < ApplicationRecord
 
   attr_accessor :failure_days
 
-  has_many :accounts, foreign_key: :domain, primary_key: :domain
+  has_many :accounts, foreign_key: :domain, primary_key: :domain, inverse_of: false
 
-  belongs_to :domain_block, foreign_key: :domain, primary_key: :domain
-  belongs_to :domain_allow, foreign_key: :domain, primary_key: :domain
-  belongs_to :unavailable_domain, foreign_key: :domain, primary_key: :domain # skipcq: RB-RL1031
+  with_options foreign_key: :domain, primary_key: :domain, inverse_of: false do
+    belongs_to :domain_block
+    belongs_to :domain_allow
+    belongs_to :unavailable_domain # skipcq: RB-RL1031
+  end
 
   scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
 
diff --git a/app/models/notification.rb b/app/models/notification.rb
index 3eaf557b081e0bb80175c6dde357c45c9e6f547e..8ba506fa1b7779772a7dc2081f14538d8fe23275 100644
--- a/app/models/notification.rb
+++ b/app/models/notification.rb
@@ -55,13 +55,15 @@ class Notification < ApplicationRecord
   belongs_to :from_account, class_name: 'Account', optional: true
   belongs_to :activity, polymorphic: true, optional: true
 
-  belongs_to :mention,        foreign_key: 'activity_id', optional: true
-  belongs_to :status,         foreign_key: 'activity_id', optional: true
-  belongs_to :follow,         foreign_key: 'activity_id', optional: true
-  belongs_to :follow_request, foreign_key: 'activity_id', optional: true
-  belongs_to :favourite,      foreign_key: 'activity_id', optional: true
-  belongs_to :poll,           foreign_key: 'activity_id', optional: true
-  belongs_to :report,         foreign_key: 'activity_id', optional: true
+  with_options foreign_key: 'activity_id', optional: true do
+    belongs_to :mention, inverse_of: :notification
+    belongs_to :status, inverse_of: :notification
+    belongs_to :follow, inverse_of: :notification
+    belongs_to :follow_request, inverse_of: :notification
+    belongs_to :favourite, inverse_of: :notification
+    belongs_to :poll, inverse_of: false
+    belongs_to :report, inverse_of: false
+  end
 
   validates :type, inclusion: { in: TYPES }
 
diff --git a/app/models/status.rb b/app/models/status.rb
index 302049e20e5d57beaa38ae07112882231de3fd11..990d0fc29e6eca5deabebab50ebea89c7a101149 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -56,7 +56,7 @@ class Status < ApplicationRecord
   belongs_to :account, inverse_of: :statuses
   belongs_to :in_reply_to_account, class_name: 'Account', optional: true
   belongs_to :conversation, optional: true
-  belongs_to :preloadable_poll, class_name: 'Poll', foreign_key: 'poll_id', optional: true
+  belongs_to :preloadable_poll, class_name: 'Poll', foreign_key: 'poll_id', optional: true, inverse_of: false
 
   belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true
   belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true