(Rails) Управление ПОЛЬЗОВАТЕЛЬСКИМИ предпочтениями с помощью резервной копии MASTER PREFS ...?

StackOverflow https://stackoverflow.com/questions/1944090

Вопрос

Я ищу механизм, с помощью которого можно было бы упростить пользовательские настройки.Я также хочу иметь набор "основных" префиксов, которые используются, если у текущего вошедшего в систему пользователя нет определенного набора префиксов.Я вижу несколько вопросов, похожих на этот, но они, похоже, уходят в теорию вместо того, чтобы просто предлагать качественное решение.

В основном я ищу информацию как по управлению, так и по хранилищу - модели, контроллеры и т.д.Первоначально я рассматривал возможность просто использовать нормализованную таблицу из более чем 50 столбцов (для повышения производительности и т.д.).Тем не менее, я планирую добавить различные неизвестные настройки в будущем, и, помимо производительности, я мог бы представить, что несколько столбцов выйдут из-под контроля.Мысли?

Это было полезно?

Решение

На мой взгляд, лучший способ определить и использовать значения по умолчанию - это добавить еще одну строку в таблицу пользовательских настроек и загрузить ее как переменную класса в вашей модели.Затем переопределите средства доступа, чтобы найти значения по умолчанию, если предпочтение не было найдено.Что - то вроде этого:

class UserPreference < ActiveRecord::Base
  # load default preferences as a class variable
  @@defaults ||= find(1).attributes

  # redefine accessors or each column to load default if nil
  column_names.each do |column|
    method_name = "#{column}_with_default".to_sym
    send :define_method, method_name do 
      value = send("#{column_without_default}") 
      case value
      when nil
        @@defaults[column]
      else 
        value
      end
    end
    alias_method_chain column, :default
  end
  ...
end

По сути, настройки по умолчанию (загруженные из строки 1) хранятся в Модели как переменная класса.Все средства доступа переопределяются и становятся частью цепочки методов псевдонимов, так что значение по умолчанию будет возвращено, если возвращаемое значение равно нулю.Я хотел использовать || вместо case, но это вызвало бы проблемы в том случае, если пользователь установил логическое значение false .

Редактировать:Н.Б.Я не знаю хорошего способа обновить значения по умолчанию в приложении rails без перезапуска сервера.

Другие советы

Если вам не нужно манипулировать или сортировать данные по индивидуальным предпочтениям в базе данных, вы можете использовать столбец с одной битовой маской (целочисленный).По сути, битовая маска представляет собой набор переключателей включения/выключения, представленный в виде двоичного числа.Например, предположим, что у нас есть три предпочтения:

  1. просматривать подписки
  2. просмотреть цвета
  3. посмотреть полные имена

Допустим, у пользователя включены 1 и 3, а 2 выключены.Используя 1 для включения и 0 для выключения, битовая маска для этого будет следующей:

101

(вкл выкл вкл)

Это сохраняется в базе данных как 5 потому что 101 равно 5 в двоичном формате.Битовые маски легко хранить в базе данных (используйте один целочисленный столбец) и ими легко манипулировать, если вы знаете операторы (для объединения предпочтений пользователя со значениями сайта по умолчанию).У Райана Бейтса есть отличное руководство по использованию битовых масок в Rails: Встроенная ассоциация.Надеюсь, это даст вам конкретный пример, который вы ищете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top