القضبان - كيف يمكن أن تنتمي إلى الكود؟ "
-
21-09-2019 - |
سؤال
أنا أعمل على تطبيق Rails الذي سيحتوي على معلومات على مجموعة من الأشخاص. هناك حالتان للاستخدام:
- يدخل المسؤول ويحافظ على ملف تعريف الشخص
- يمكن للشخص أن يقرر التسجيل وتسجيل الدخول والحفاظ على ملفه الشخصي الخاص
أحاول تحديد العلاقة بين الملف الشخصي والمستخدم. الآن ، هذا هو profile belongs_to :user
, ، و user has_one :profile
.
لكن هذا ينفجر ، لأن بعض الملفات الشخصية ليس لها مستخدم حتى الآن - فهي تحتفظ بها المسؤول. في هذه الحالة ، user_id
العمود في profiles
هل فارغ ، فشل الانضمام ، ولن يتم تحميل الصفحة. ++
كيف يمكنني إعداد نوع من العلاقة "ربما ينتمي إلى"؟
++(في الواقع ، يظهر فارغًا ، مع عدم عرض أي خطأ ، و development.log
ليس لدي أي أخطاء أيضًا ، لكن يمكنني أن أرى أنه لا ينهي جميع الاستعلامات التي تقوم بها لملف تعريف يحتوي على مستخدم. إذا كان أي شخص يعرف كيف يمكنني الحصول على رسالة خطأ مفيدة بدلاً من ذلك ، فسيكون ذلك أيضًا رائعًا.)
المحلول
هذه هي الطريقة الصحيحة للقيام بذلك. belongs_to
لا يمنع null
القيم ، وهذا يبدو وكأنه ما تريد.
قد لا يكون لدى "الصفحة" لملف تعريف لا ينتمي إلى مستخدم بعد العديد من الاستعلامات ، لأنه لا توجد حاجة (أو طريقة) للاستعلام عن جدول المستخدمين لهذا الملف الشخصي.
يجب عليك مراجعة profile.user
ل nil
وقدم وجهات نظرك وفقًا لذلك.
نصائح أخرى
اذا كان Profile
حقا ينتمي إلى أ User
, ، بعد ذلك ، لا ينبغي أن يكون فارغًا على الإطلاق (تمامًا مثلما لا يكون من المنطقي التفكير في Engine
بدون ال Car
إنه مرتبط). لذلك تحتاج إلى حذف Profile.belongs_to :user
جمعية.
الآن يجب أن تكون قادرًا على التحرير بحرية Profiles
وببساطة إرفاقهم بـ User
بمجرد استعدادهم. لكن لديك مشكلة أخرى:
يمكن للشخص أن يقرر التسجيل وتسجيل الدخول والحفاظ على ملفه الشخصي الخاص
كيف يحدد النظام بشكل موثوق أي ملف تعريف تم إنشاؤه مسبقًا ينتمي إلى مستخدم معين ليس لديه ملف تعريف بعد؟ هذه مشكلة في التصميم التي يتعين عليك الفرز.