Ich glaube, das, was du vermisst, ist, es zu den Rails-Routen hinzuzufügen.
Etwas wie das in plugin.rb.
JbTest::Engine.routes.draw do
get "/hello" => "jbtest#index"
end
Hier ist ein Anfang. Das andere, was du tun musst, ist, dir GitHub - discourse/all-the-plugins anzusehen und dort nachzusehen. Da jetzt so viele in den Kern integriert wurden, könntest du wahrscheinlich einfach dort nach Beispielen suchen, wie man sie zu den Rails-Routen hinzufügt.
Minimal Custom Route Plugin for Discourse
AI
pfaffman:
Was ist nötig, um eine Route zu Discourse Rails hinzuzufügen?
Kannst du mir ein minimales Proof of Concept geben, das ein plugin.rb, einen Controller und die notwendigen Dinge enthält, um die Route zu Rails hinzuzufügen?
DiscourseHelper:
Searching
Searching for: How to add a custom route to Discourse using a plugin, including a minimal example with plugin.rb, custom controller, and the necessary code to register the Rails route?
Reading
Read: Developing Discourse Plugins - Part 1 - Create a basic plugin
Searching
Searching for: Minimal proof of concept for adding a custom Rails route in Discourse plugin including plugin.rb, controller implementation, and code to register the route.
Reading
Read: Creating Routes in Discourse and Showing Data
Reading
Read: Add custom user routes using plugins
Reading
Read: Adding a ruby controller via plugin
Hier ist ein minimales Proof of Concept zum Hinzufügen einer benutzerdefinierten Rails-Route zu Discourse über ein Plugin, einschließlich der wichtigsten Dateien, die du benötigst: plugin.rb, ein Controller und der Code zur Registrierung der Route.
Wichtige Punkte
- Die beste Vorgehensweise ist die Verwendung einer Rails-"Engine" innerhalb deines Plugins, um deine Controller und Routen zu isolieren.
- Du musst deinen Controller explizit in
plugin.rb einbinden.
- Um eine neue Route zu registrieren, verwendest du die
routes.draw-Methode der Engine und bindest die Engine in die Hauptanwendungsrouten ein.
Minimales Beispiel
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
Wie das funktioniert:
GET /my_plugin/hello gibt die Plain-Text-Antwort "Hello from my plugin!" zurück.
Erforderliche Verzeichnisstruktur:
plugins/
my-custom-route/
plugin.rb
app/
controllers/
my_plugin/
my_controller.rb
Weitere Details und erweiterte Beispiele findest du unter:
Dieses Proof of Concept hilft dir, einen einfachen benutzerdefinierten Endpunkt über ein Plugin zu deiner Discourse-Instanz hinzuzufügen. Wenn du Fragen zur Integration mit der Ember/JS-Seite hast, lass es mich wissen!