في اختبار وحدة القضبان ، كيف يمكنني الحصول على تركيبات المستخدم لتحميل ملفه الشخصي المرتبط به؟

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

سؤال

في الوثائق المتعلقة بالتجهيزات (http://api.rubyonrails.org/classes/fixtures.html) أنها توفر المثال التالي لاستخدام مراجع التسمية للجمعيات:

### in pirates.yml
reginald:
  name: Reginald the Pirate
  monkey: george

### in monkeys.yml
george:
  name: George the Monkey
  pirate: reginald

لذا ، بعد تقدمهم ، لدي نموذج مستخدم has_one: ملف تعريف ، نموذج ملف تعريف ينتمي: المستخدم ، وحاول إعداد تركيبات لكل مثالهم:

### in users.yml
reginald:
  id: 1
  login: reginald

### in profiles.yml
reginalds_profile:
  id: 1
  name: Reginald the Pirate
  user: reginald

(ملاحظة: نظرًا لأن جمعيتي أحادية الاتجاه ، فإن تركيبات المستخدم لا تحتوي على جمعية "ملف تعريف: reginalds_profile"-مما يؤدي إلى حدوث خطأ لأن جدول SQL ليس له سمة ملف تعريف _id.)

تكمن المشكلة في اختبارات وحدتي التي يبدو أن كل شيء يبدو أنه يتم تحميله بشكل صحيح ، لكن المستخدمين (: Reginald). profile دائمًا لا شيء. ماذا ينقصني؟

هل كانت مفيدة؟

المحلول

استنادًا إلى اقتراح Tadman ، قمت ببعض البحث ووجدت الإجابة في مكان آخر على هذا الموقع ، لذلك قد أقوم بنشره أيضًا.

انظر آخر بعنوان الجمعيات التلقائية في تركيبات Ruby on Rails

يبدو أن الطريقة التي تجد بها Rails تجهيزات مرتبطة عند استخدام التسميات (المستخدم: reginald) بدلاً من IDS (user_id: 1) هي عن طريق تجزئة الاسم وافتراض أن التجزئة هي المعرف. إذا قمت بتعيين المعرف على شيء محدد ، فإن هذا يفشل. ولكن إذا تركت القضبان تلقائيًا تعيين معرفات ، فإنها تستخدم مخطط التجزئة. لذا فإن وثائق ملصقات جمعية التثبيت تفتقد إلى حد كبير-إذا كنت تستخدم الملصقات ، فيجب عليك تجنب تطبيق معرفاتك الخاصة في المباريات التي يجب مطابقة. لا يزال بإمكان التركيبات التي لا تتوافق مع الملصقات أن تحتوي على أي مخطط معرف تختاره.

نصائح أخرى

قد تضطر إلى إعلان أنك تقوم بتحميل جميع هذه التركيبات لأنني لا أعتقد أن محمل التثبيت يتبع ارتباطات مثل هذا تلقائيًا. في بعض الحالات ، قد تضطر إلى فعل أكثر من مجرد:

fixtures :all

في الواقع أعلن كل منهم:

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