متى يتم تضمين الوحدات النمطية في فئة روبي تعمل في القضبان؟

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

سؤال

أحاول كتابة طريقة تخبرني بكل فصل يتضمن وحدة معينة. تبدو هكذا -

def Rating.rateable_objects
  rateable_objects = []
  ObjectSpace.each_object(Class) do |c|
    next unless c.include? Rateable
    rateable_objects << c
  end
  rateable_objects
end

حيث "قابلة للتصنيف" هي الوحدة النمطية التي أنا أدرجها في العديد من النماذج.

ما أجده هو أن هذه الطريقة تُرجع [] إذا أسميتها فورًا بعد تشغيل وحدة التحكم في Rails أو تشغيل الخادم. ولكن إذا قمت أولاً بتسهيل مثيل لأحد النماذج المستهلكة ، فسيقوم بإرجاع هذا النموذج في النتيجة.

إذن متى يتم تضمين الوحدات النمطية؟ أظن في وقت لاحق في هذه العملية مما كان عليه عندما يبدأ التطبيق. إذا لم أتمكن من الحصول على هذه المعلومات بهذه الطريقة في وقت مبكر من العملية ، فهل هناك على أي حال لإنجاز هذا؟

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

المحلول

يتم تضمينها عندما يتم تنفيذ بيان التضمين عند تعريف الفصل. وحدات/فئات Rails Autoloads عند استخدامها لأول مرة. أيضًا ، قد تجرب شيئًا كهذا:

module Rateable
  @rateable_object = []
  def self.included(klass)
    @rateable_objects << klass
  end
  def rateable_objects
    @rateable_objects
  end
end

سيؤدي ذلك إلى بناء القائمة حيث تشمل الفصول الوحدة النمطية.

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