وحدات التحكم والمسارات

عند اتباع برنامج تعليمي لإعداد وحدة تحكم مخصصة ومسار، أحصل على صفحة خطأ التوجيه. تسرد الصفحة المسارات ووحدات التحكم، وكلها صحيحة ومع ذلك، عندما أطلب المورد، أحصل على أخطاء. أفهم أن هذا برنامج تعليمي قديم ولكنه، هل المعلومات دقيقة؟ لقد أرفقت هيكل المكون الإضافي الخاص بي وربما يمكن لشخص ما المساعدة في استكشاف المشكلة وإصلاحها. شكرًا!

jb-test.zip (522.2 KB)

أعتقد أن الشيء الذي فاتك هو إضافته إلى توجيهات Rails.

شيء مثل هذا في plugin.rb.

  JbTest::Engine.routes.draw do
    get "/hello" => "jbtest#index"
  end

هذه بداية. الشيء الآخر الذي يجب فعله هو الذهاب إلى GitHub - discourse/all-the-plugins والبحث فيه. الآن بعد أن تم إضافة الكثير منها إلى النواة، أفترض أنه يمكنك البحث هناك عن أمثلة للإضافات إلى توجيهات Rails.

مسار مخصص بسيط للمكون الإضافي لـ DiscourseAI

pfaffman:

ما هو المطلوب لإضافة مسار إلى Discourse rails؟

هل يمكنك أن تعطيني إثبات مفهوم بسيط يتضمن plugin.rb، ووحدة تحكم، والأشياء اللازمة لإضافة المسار إلى rails؟

DiscourseHelper:

البحث

البحث عن: كيفية إضافة مسار مخصص إلى Discourse باستخدام مكون إضافي، بما في ذلك مثال بسيط مع plugin.rb، ووحدة تحكم مخصصة، والرمز اللازم لتسجيل مسار Rails؟

القراءة

قراءة: تطوير مكونات Discourse الإضافية - الجزء الأول - إنشاء مكون إضافي أساسي

البحث

البحث عن: إثبات مفهوم بسيط لإضافة مسار Rails مخصص في مكون إضافي لـ Discourse يتضمن plugin.rb، وتنفيذ وحدة التحكم، والرمز لتسجيل المسار.

القراءة

قراءة: إنشاء مسارات في Discourse وعرض البيانات

القراءة

قراءة: إضافة مسارات مستخدم مخصصة باستخدام المكونات الإضافية

القراءة

قراءة: إضافة وحدة تحكم Ruby عبر مكون إضافي

هذا إثبات مفهوم بسيط لإضافة مسار Rails مخصص إلى Discourse عبر مكون إضافي، بما في ذلك الملفات الرئيسية التي ستحتاجها: plugin.rb، ووحدة تحكم، والرمز لتسجيل المسار.

النقاط الرئيسية

  • أفضل ممارسة هي استخدام “محرك” Rails داخل المكون الإضافي الخاص بك لعزل وحدات التحكم والمسارات الخاصة بك.
  • تحتاج إلى طلب وحدة التحكم الخاصة بك بشكل صريح في plugin.rb.
  • لتسجيل مسار جديد، يمكنك استخدام طريقة routes.draw الخاصة بالمحرك وتركيب المحرك في مسارات التطبيق الرئيسية.

مثال بسيط

plugin.rb

# name: my-custom-route
# about: Adds a custom route via Rails engine in a plugin
# version: 0.1
# authors: Your Name

after_initialize do
  module ::MyPlugin
    class Engine < ::Rails::Engine
      engine_name "my_plugin"
      isolate_namespace MyPlugin
    end
  end

  require_dependency File.expand_path('../app/controllers/my_plugin/my_controller.rb', __FILE__)

  MyPlugin::Engine.routes.draw do
    get "/hello" => "my#hello"
  end

  Discourse::Application.routes.append do
    mount ::MyPlugin::Engine, at: "/my_plugin"
  end
end

app/controllers/my_plugin/my_controller.rb

module MyPlugin
  class MyController < ::ApplicationController
    def hello
      render plain: "Hello from my plugin!"
    end
  end
end

كيف يعمل هذا:

  • GET /my_plugin/hello سيعيد الاستجابة النصية العادية "Hello from my plugin!".

هيكل الدليل المطلوب:

plugins/
  my-custom-route/
    plugin.rb
    app/
      controllers/
        my_plugin/
          my_controller.rb

لمزيد من التفاصيل والأمثلة الموسعة، انظر:

سيساعدك إثبات المفهوم هذا في إضافة نقطة نهاية مخصصة بسيطة إلى مثيل Discourse الخاص بك عبر مكون إضافي. إذا كانت لديك أسئلة حول دمج هذا مع جانب Ember/JS، فأخبرني!

إعجاب واحد (1)

حسنا. شكرا لك. يبدو أن هذا الجزء من التعليمات البرمجية قد تمت إضافته إلى routes.rb ولكني سألقي نظرة على المكونات الإضافية الأساسية وأرى ما إذا كان بإمكاني العثور على مثال في plugins.rb. شكرا!

إعجاب واحد (1)