عرض جميع إصدارات السجلات الفردية في بابيرتريل

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

  •  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 على أي كائن مستخدم (أو لاعب).

نأمل أن يساعد!

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