روبي على القضبان مع أنواع المستخدمين المختلفة
-
24-09-2019 - |
سؤال
أحاول إنشاء تطبيق يحتوي على أنواع مختلفة من المستخدمين ، أستخدم AuthLogic لمصادقة المستخدم.
لذلك لدي نموذج مستخدم واحد يحتوي على الحقل المطلوب لـ AuthLogic للقيام بسحره. أريد الآن إضافة طرازين مختلفان من شأنه أن يصف الحقول الإضافية لأنواع المستخدمين المختلفة.
دعنا نقول أن المستخدم يسجل ، ثم يختار نوع المستخدم الخاص به ، عندما يتم تسجيله للتسجيل ، سيكون قادرًا على إضافة معلومات خاصة بنموذج المستخدم الخاص به.
ما هي أفضل طريقة للقيام بذلك؟ أنا أبحث حاليًا في نماذج متعددة الأشكال ، لكنني لست متأكدًا من أن هذا هو أفضل طريق لأخذه. أي مساعدة سيكون موضع تقدير كبير، وذلك بفضل.
المحلول
يمكنك إنشاء مختلف profile
الجداول وربط الملف الشخصي للمستخدم. لذلك لكل نوع مستخدم ، يمكنك إنشاء جدول وتخزين المعلومات المحددة هناك واحصل على ملف user_id
عمود للإشارة إلى users
.
class User < ActiveRecord::Base
has_one :type_1
has_one :type_2
end
class Type1 < ActiveRecord::Base
belongs_to :user
end
class Type2 < ActiveRecord::Base
belongs_to :user
end
الآن هذا ليس جافًا جدًا ويمكن أن يؤدي إلى مشاكل إذا كنت تضيف باستمرار أنواع المستخدمين. لذلك يمكنك النظر في تعدد الأشكال.
من أجل تعدد الأشكال ، users
يحدد الجدول نوع المستخدم (profileable_id
و profileable_type
). لذلك شيء من هذا القبيل:
class User < ActiveRecord::Base
belongs_to :profileable, :polymorphic => true
end
class Type1 < ActiveRecord::Base
has_one :user, :as => :profileable
end
class Type2 < ActiveRecord::Base
has_one :user, :as => :profileable
end
ثم هناك خيار ثالث من STI (ميراث جدول واحد) لأنواع المستخدمين. لكن هذا لا يتوسع بشكل جيد إذا كانت حقول نوع المستخدم تختلف بشكل كبير.
نصائح أخرى
أفضل طريقة رأيتها هنا http://astockwell.com/blog/2014/03/polymorphic-associations-