class Admin::SettingsController < Admin::BaseController before_action :set_current_section def index end def update_settings @errors = ActiveModel::Errors.new(Setting.new) changed_keys = [] setting_params.keys.each do |key| next if clean_param(key).nil? || (Setting.send(key).to_s == clean_param(key)) changed_keys.push(key) setting = Setting.new(var: key) setting.value = clean_param(key) unless setting.valid? @errors.merge!(setting.errors) end end if @errors.any? render :show and return end changed_keys.each do |key| Setting.send("#{key}=", clean_param(key)) end end private def set_current_section @current_section = :settings end def setting_params params.require(:setting).permit(Setting.editable_keys.map(&:to_sym)) end def clean_param(key) if Setting.get_field(key)[:type] == :string setting_params[key].strip else setting_params[key] end end end