(القضبان) إدارة مسبقات المستخدم مع احتياطي المسبق الرئيسي ...؟

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) في النموذج كمتغير فئة. يتم إعادة تعريف جميع الملحقات وجزء من سلسلة طريقة الاسم المستعار بحيث يتم إرجاع الافتراضي إذا كانت القيمة التي تم إرجاعها لا شيء. أردت استخدام || بدلاً من الحالة ، ولكن هذا من شأنه أن يتسبب في مشاكل في حالة قيام المستخدم بتعيين تفضيل منطقي على خطأ.

تحرير: NB لا أعرف طريقة جيدة لتحديث الإعدادات الافتراضية في تطبيق Rails دون إعادة تشغيل الخادم.

نصائح أخرى

إذا لم تكن بحاجة إلى التلاعب أو الفرز حسب التفضيلات الفردية في قاعدة البيانات ، فقد ترغب في استخدام عمود Bitmask (عدد صحيح). في الأساس ، يعد Bitmask مجموعة من مفاتيح التشغيل/الإيقاف الممثلة كرقم ثنائي. على سبيل المثال ، دعنا نقول أن لدينا ثلاثة تفضيلات:

  1. عرض الاشتراكات
  2. عرض الألوان
  3. عرض الأسماء الكاملة

دعنا نقول أن المستخدم لديه 1 و 3 في و 2 قبالة. باستخدام 1S لـ ON و 0S للإيقاف ، فإن Bitmask لهذا هو:

101

(على OFF ON)

يتم تخزين هذا في قاعدة البيانات 5 لان 101 هو 5 في ثنائي. من السهل تخزين Bitmasks في قاعدة البيانات (استخدم عمود عدد صحيح واحد) ويسهل معالجته بمجرد معرفة المشغلين (لدمج تفضيلات المستخدم في الإعدادات الافتراضية للموقع). لدى Ryan Bates برنامج تعليمي رائع حول استخدام Bitmasks في القضبان: جمعية emmbedded. نأمل أن يمنحك هذا المثال الملموس الذي تبحث عنه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top