أعتقد أن هذا السؤال يتعمق في تفاصيل Rails، ولكن ها أنا ذا:
أحاول معرفة كيفية عرض المالك أو الملاك لكل مجموعة في صفحة فهرس المجموعات (ما يعادل هذه الصفحة).
نقطة البداية لدي هي نموذج المجموعة، والذي يوحي لي بأن سمة مالكي المجموعة ليست مرفقة مباشرة بالمجموعة (على عكس، على سبيل المثال، “full_name”، الذي يمكنني رؤيته جزءًا من مخطط المجموعة في أسفل تلك الرابطة).
إذًا من الواضح أنني لا أستطيع استدعاء group.owners كما أستطيع استدعاء group.full_name. وبالمثل، لا أعتقد أنه يمكنني استعادة هذه المعلومات من واجهة برمجة التطبيقات (API) عن طريق جلب معلومات حول مجموعة، لأن “owners” لا يبدو أنه أحد القيم المُرجعة.
كيف يمكنني استعادة مالكي المجموعة لعرض هذه المعلومات؟
أنا لست متأكداً تماماً مما تحاول تحقيقه، لكنني أعتقد أنك تبحث عن GroupUser. يمكنك الحصول على قائمة بمعرفات المجموعات (group_ids) ومعرفات المستخدمين (user_ids) لأصحابها باستخدام شيء مثل:
لقد قمت بدمج شيء ما كدليل مفهوم أولي خشن للغاية قد يمنحك نقطة انطلاق لتكتشفه بنفسك:
my-plugin/plugin.rb
# frozen_string_literal: true
# name: Group Test
# about: Group Test
# version: 0.1
# authors: Tester
# url: https://github.com/someone/something
enabled_site_setting :group_test_enabled
after_initialize do
add_to_serializer(:basic_group, :owners) do
GroupUser.where(group_id: object.id, owner: true).pluck("user_id")
end
end
هذا مفيد للغاية—شكرًا لك. لقد فهمت أنك غير قادر على تقديم المزيد من المساعدة المتعلقة بالكود، لكنني آمل أن أتمكن من طرح سؤالين عامّين قد يجدهما الآخرون مفيدًا أيضًا:
—هل يمكنك شرح سبب ضرورة استخدام المُسلسل (serializer) هنا باختصار؟ (أحاول الفهم ليس فقط في هذا السياق بل أيضًا في التخصيصات الأخرى)
وسؤال سريع آخر: هل يمكنني تحقيق هذا فقط من خلال لوحة التحكم الخاصة بي؟ (فإن إنشاء إضافة سيكون بالتأكيد أكثر تنظيمًا، لكن بما أنني على خطة مستضافة، فلا يمكنني استيراد إضافات جديدة مباشرةً—فذلك يتطلب على الأقل بضع خطوات إضافية)
مرحبًا @tshenry، أحاول تشغيل إضافة تتضمن بعض الكود الذي قدمته أعلاه لكشف مالك المجموعة. لدي سؤال أعمل على حله:
– النموذج ذو الصلة هنا هو “group” (المشار إليه بواسطة groups-info)
– ولكن في المعالج التسلسلي (serializer)، لم تقل: add_to_serializer(:group, :owners)… بدلاً من الإشارة إلى :group، تشير إلى :basic_group، مثل:
add_to_serializer(:basic_group, :owners)
لماذا تشير إلى basic_group بدلاً من group في دالة add_to_serializer؟
كيف عرفت أن هذا المصمم (serializer) هو الأنسب لهذه الحالة؟
هذا ما أستطيع استخلاصه: في متحكم المجموعات، داخل إجراء index، توجد دالة (أو طريقة) تُسمى render_json_dump تتضمن BasicGroupSerializer في استدعاء serialize_data.
الصفحة ذات الصلة لعرض بيانات المجموعات هي فهرس المجموعات، لذا فإن إجراء index في المتحكم هو الصحيح للنظر فيه هنا.
هل هذه هي الطريقة التي عرفت بها أن BasicGroupSerializer هو الأنسب للإشارة إليه هنا؟
إذا كان كل ذلك صحيحًا، فهل سيتم استخدام GroupShowSerializer عند عرض صفحة عرض المجموعة، لأن هذا هو المصمم المذكور في إجراء show في المتحكم؟ (الصفحة التي تحتوي على تفاصيل مجموعة - رغم أنه لا يبدو أن هناك عرضًا يُسمى “groups.show”)).
وماذا عن الحالة التي لا يُشار فيها إلى أي مصمم، مثلما يحدث في إجراء new في المتحكم؟
هناك نقطة إضافية جديرة بالملاحظة وهي مربكة جدًا وأربكتني كثيرًا في البداية: ريلز (Rails) هو إطار عمل يستخدم بعض اتفاقيات التسمية الصارمة جدًا لتفعيل سحره. فليس من الواضح على الفور، عندما لا تكون معتادًا عليه، كيف يتم ربط كل شيء ببعضه، لكن عند أخذ اتفاقيات التسمية في الاعتبار، يبدأ الأمر في الوضوح.
شكرًا على هذا المرجع، إنه مفيد جدًا. أجد ملف التوجيهات محيرًا بعض الشيء. على سبيل المثال، قدر ما أستطيع، لا توجد إشارة إلى إجراء تحكم groups#index، رغم أنه بوضوح الإجراء ذو الصلة لصفحة المجموعة الرئيسية. ومع ذلك، أرى إجراء groups#index عندما أقوم بتشغيل:
% rails routes، وهو ما أعتقد أنه أيضًا طريقة مفيدة لمعرفة كيف تتوافق صفحة معينة مع وحدة تحكم.