متى يتم تضمين الوحدات النمطية في فئة روبي تعمل في القضبان؟
-
30-09-2019 - |
سؤال
أحاول كتابة طريقة تخبرني بكل فصل يتضمن وحدة معينة. تبدو هكذا -
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
سيؤدي ذلك إلى بناء القائمة حيث تشمل الفصول الوحدة النمطية.