diff --git a/app/controllers/settings/preferences/appearance_controller.rb b/app/controllers/settings/preferences/appearance_controller.rb
index 80ea57bd2d21d7490caed4d027db9d2379877eb5..4d7d12bb7f7e5550b6f999ce18cbda39fc965a34 100644
--- a/app/controllers/settings/preferences/appearance_controller.rb
+++ b/app/controllers/settings/preferences/appearance_controller.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-class Settings::Preferences::AppearanceController < Settings::PreferencesController
+class Settings::Preferences::AppearanceController < Settings::Preferences::BaseController
   private
 
   def after_update_redirect_path
diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences/base_controller.rb
similarity index 81%
rename from app/controllers/settings/preferences_controller.rb
rename to app/controllers/settings/preferences/base_controller.rb
index 281deb64d175a10535a690cd60a2a9550f7adfc6..faf778a7e525327b7837120ae123addff33d1263 100644
--- a/app/controllers/settings/preferences_controller.rb
+++ b/app/controllers/settings/preferences/base_controller.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-class Settings::PreferencesController < Settings::BaseController
+class Settings::Preferences::BaseController < Settings::BaseController
   def show; end
 
   def update
@@ -15,7 +15,7 @@ class Settings::PreferencesController < Settings::BaseController
   private
 
   def after_update_redirect_path
-    settings_preferences_path
+    raise 'Override in controller'
   end
 
   def user_params
diff --git a/app/controllers/settings/preferences/notifications_controller.rb b/app/controllers/settings/preferences/notifications_controller.rb
index a16ae6a672ab3a389fade3992b3d2ff40015f90b..66d6c9a2f7ba41890dd1e061ddfb5e3f5806b34f 100644
--- a/app/controllers/settings/preferences/notifications_controller.rb
+++ b/app/controllers/settings/preferences/notifications_controller.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-class Settings::Preferences::NotificationsController < Settings::PreferencesController
+class Settings::Preferences::NotificationsController < Settings::Preferences::BaseController
   private
 
   def after_update_redirect_path
diff --git a/app/controllers/settings/preferences/other_controller.rb b/app/controllers/settings/preferences/other_controller.rb
index 07eb89a76235dc81d954b7b28b7beb096cf16455..a19fbf5c48c3c790b1d83a32ce8463ea9b917808 100644
--- a/app/controllers/settings/preferences/other_controller.rb
+++ b/app/controllers/settings/preferences/other_controller.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-class Settings::Preferences::OtherController < Settings::PreferencesController
+class Settings::Preferences::OtherController < Settings::Preferences::BaseController
   private
 
   def after_update_redirect_path
diff --git a/spec/controllers/settings/preferences/appearance_controller_spec.rb b/spec/controllers/settings/preferences/appearance_controller_spec.rb
index 083bf495449e20f5a2f91530559b4df0438a9fc3..9a98a418865ef01b5d53c345ae431e827ebfe4f6 100644
--- a/spec/controllers/settings/preferences/appearance_controller_spec.rb
+++ b/spec/controllers/settings/preferences/appearance_controller_spec.rb
@@ -31,5 +31,11 @@ describe Settings::Preferences::AppearanceController do
 
       expect(response).to redirect_to(settings_preferences_appearance_path)
     end
+
+    it 'renders show on failure' do
+      put :update, params: { user: { locale: 'fake option' } }
+
+      expect(response).to render_template('preferences/appearance/show')
+    end
   end
 end
diff --git a/spec/controllers/settings/preferences/base_controller_spec.rb b/spec/controllers/settings/preferences/base_controller_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..53b3a461ed589a4563cac42fc0e7bcac3d8fcca7
--- /dev/null
+++ b/spec/controllers/settings/preferences/base_controller_spec.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe Settings::Preferences::BaseController do
+  describe 'after_update_redirect_path' do
+    it 'raises error when called' do
+      expect { described_class.new.send(:after_update_redirect_path) }.to raise_error(/Override/)
+    end
+  end
+end