Controller und Routen

Wenn ich dem Tutorial zum Einrichten eines benutzerdefinierten Controllers und einer Route folge, erhalte ich die Seite „Routing-Fehler“. Die Seite listet die Pfade und Controller auf, was alles korrekt ist, aber wenn ich die Ressource anfordere, erhalte ich Fehler. Ich verstehe, dass dies ein altes Tutorial ist, aber sind die Informationen korrekt? Ich habe mein Plugin-Skelett angehängt und vielleicht kann mir jemand bei der Fehlersuche helfen. Danke!

jb-test.zip (522,2 KB)

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!

1 „Gefällt mir“

OK. Danke. Es sieht so aus, als wäre dieser Codeausschnitt zu routes.rb hinzugefügt worden, aber ich werde die Kern-Plugins durchgehen und sehen, ob ich ein Beispiel in plugins.rb finden kann. Danke!

1 „Gefällt mir“