عرض جميع إصدارات السجلات الفردية في بابيرتريل
-
11-12-2019 - |
سؤال
أنا بناء نظام الدوري وحاليا يقوم بتخزين وتحديث اللاعبين 'إيلو النتيجة' اعتمادا على النتيجة.الآن ، وأنا أحاول أن أضيف في 'هايتشارتس' لعرض اللاعبين إيلو النتيجة خلال الموسم في الحلو تبحث الرسم البياني الخط.اقترح شخص ما يمكنني استخدام بابيرتريل لتخزين التحديثات ولقد حصلت على أن جميع تثبيت.
الآن هنا يأتي مشكلتي ، وأنا لا يمكن أن يبدو لمعرفة كيفية بصق المستخدمين إصدارات إيلوسكوري في مجموعة سهلة ل' هايغتشارتس ' للاستخدام.يمكنني الحصول على آخر التحديثات إلى إيلوسكوري:
Last updated score = <%= @player.versions.last.reify.elo_score %>
ولكن لا يمكنني العثور على بناء الجملة للبصق الكل 'إصدارات' ل 'إيلو_سكوري'.شيء من هذا القبيل "1000, 1020, 1043, 1020".
لقد حاولت أيضا:
<%= @player.versions.map { |version| version.reify.elo_score} %>
ولكن هذا يعطيني "طريقة غير محددة 'إيلو_سكور' ل لا شيء: نيلكلاس".بينما فقط <٪ = @لاعب.الإصدارات.خريطة {/الإصدار / الإصدار.ريفي ٪ > يبصق الكل المعلومات في السجل ومن الواضح ليس فقط إيلوسكوري.
يمكن لأي شخص أن يساعد?آسف إذا لم أكن قد جعلت هذا واضحا ، وأنا العلامة التجارية الجديدة المطلقة إلى القضبان ، وهذا هو مجرد مشروع متعة في وقت فراغي ولكن أواجه الانفجار!
شكرا جزيلا!
المحلول
ماذا فعلت هنا:
@player.versions.map { |version| version.reify.elo_score }
على ما يرام تماما لاتخاذ كل تلك الدرجات ووضعها في صفيف.المشكلة التي تحصل عليها (ال nil:NilClass
الاشياء) قادم لأن واحد على الأقل reify
لا شيء.أي أن بعض الإصدارات لا تحتوي على تجسيد.
إذا كان من المفترض أن يكون لكل إصدار ريفي ، تأكد من إضافة ذلك كتحقق من صحة النموذج ، والعثور في التعليمات البرمجية الخاصة بك حيث يتم تعيين ريفي ونرى لماذا لا شيء.
إذا كان من المقبول أن يحتوي الإصدار على لا شيء ، فيمكنك تحقيقه بعدد من الطرق ، لكن الطريقة المباشرة والصريحة ستبدو كما يلي:
elo_scores = []
@player.versions.each do |version|
unless version.reify.nil?
elo_scores << version.reify.elo_score
end
end
أود أن أقترح وضع هذا في طريقة ، مثل get_elo_scores
, ، وبعد ذلك يمكنك تسميتها بسهولة أكبر مثل:
@player.get_elo_scores
تحرير للتوضيح من التعليقات:
يجب أن يكون لنموذج المستخدم الخاص بك (أو نموذج المشغل ، أيا كان اسمه) طريقة تبدو كالتالي:
def get_elo_scores
elo_scores = []
self.versions.each do |version|
unless version.reify.nil?
elo_scores << version.reify.elo_score
end
end
return elo_scores
end
أعتذر عن عدم توضيح ذلك ، لكن لن تتمكن من الوصول إلى @player
ضمن هذه الطريقة لأن ذلك موجود فقط في سياق وحدة التحكم والعرض.ما سبق هو الآن طريقة مثيل مناسبة:وسوف ندعو .versions
على نفسها ، والباقي على ما يرام.أضفت أيضا مكالمة إرجاع صريحة في النهاية.
الآن سوف تكون قادرا على الاتصال @player.get_elo_scores
على أي كائن مستخدم (أو لاعب).
نأمل أن يساعد!