عند اتباع برنامج تعليمي لإعداد وحدة تحكم مخصصة ومسار، أحصل على صفحة خطأ التوجيه. تسرد الصفحة المسارات ووحدات التحكم، وكلها صحيحة ومع ذلك، عندما أطلب المورد، أحصل على أخطاء. أفهم أن هذا برنامج تعليمي قديم ولكنه، هل المعلومات دقيقة؟ لقد أرفقت هيكل المكون الإضافي الخاص بي وربما يمكن لشخص ما المساعدة في استكشاف المشكلة وإصلاحها. شكرًا!
أعتقد أن الشيء الذي فاتك هو إضافته إلى توجيهات 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؟
هذا إثبات مفهوم بسيط لإضافة مسار 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!".
سيساعدك إثبات المفهوم هذا في إضافة نقطة نهاية مخصصة بسيطة إلى مثيل Discourse الخاص بك عبر مكون إضافي. إذا كانت لديك أسئلة حول دمج هذا مع جانب Ember/JS، فأخبرني!
حسنا. شكرا لك. يبدو أن هذا الجزء من التعليمات البرمجية قد تمت إضافته إلى routes.rb ولكني سألقي نظرة على المكونات الإضافية الأساسية وأرى ما إذا كان بإمكاني العثور على مثال في plugins.rb. شكرا!