From 28e652d35d4421314902d42f0db84f683d2682c8 Mon Sep 17 00:00:00 2001
From: David Yip <yipdw@member.fsf.org>
Date: Tue, 9 Jan 2018 20:09:00 -0600
Subject: [PATCH] Allow for user object to be empty.  Fixes #317.

If a flavour has only one skin, the skin selector will be omitted.  This
omits the user[setting_skin] field, and because that's the only
user[...] field on the page, the entire user object will not be present
in the request handler's params object.

This commit accounts for that scenario by avoiding params.require(:user)
and instead picking out what we need from the params hash.
---
 app/controllers/settings/flavours_controller.rb | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/app/controllers/settings/flavours_controller.rb b/app/controllers/settings/flavours_controller.rb
index 865d5a4792..a4bdcdf3e3 100644
--- a/app/controllers/settings/flavours_controller.rb
+++ b/app/controllers/settings/flavours_controller.rb
@@ -16,7 +16,7 @@ class Settings::FlavoursController < Settings::BaseController
   end
 
   def update
-    user_settings.update(user_settings_params(params[:flavour]).to_h)
+    user_settings.update(user_settings_params(params[:flavour]))
     redirect_to action: 'show', flavour: params[:flavour]
   end
 
@@ -27,9 +27,8 @@ class Settings::FlavoursController < Settings::BaseController
   end
 
   def user_settings_params(flavour)
-    params.require(:user).merge({ setting_flavour: flavour }).permit(
-      :setting_flavour,
-      :setting_skin
-    )
+    { setting_flavour: params.require(:flavour),
+      setting_skin: params.dig(:user, :setting_skin)
+    }.with_indifferent_access
   end
 end