Contrôleurs et Routes

Lorsque je suis le tutoriel pour configurer un contrôleur personnalisé et une route, j’obtiens la page d’erreur de routage. La page liste les chemins et les contrôleurs, ce qui est tout à fait correct, mais lorsque je demande la ressource, j’obtiens des erreurs. Je comprends qu’il s’agit d’un ancien tutoriel, mais les informations sont-elles exactes ? J’ai joint le squelette de mon plugin et peut-être que quelqu’un pourra m’aider à résoudre le problème. Merci !

jb-test.zip (522,2 Ko)

Je pense que ce qui vous manque, c’est de l’ajouter au routage de Rails.

Quelque chose comme ceci dans plugin.rb.

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

Voici un début. L’autre chose à faire est de regarder GitHub - discourse/all-the-plugins et de parcourir ce qu’il contient. Maintenant que tant de choses ont été ajoutées au cœur, je suppose que vous pourriez simplement y chercher des exemples d’ajout au routage Rails.

Routage personnalisé minimal pour un plugin Discourse IA

pfaffman:

Qu’est-il nécessaire pour ajouter une route à Discourse rails ?

Pouvez-vous me donner une preuve de concept minimale qui inclut un plugin.rb, un contrôleur et les éléments nécessaires pour ajouter la route à rails ?

DiscourseHelper:

Recherche

Recherche de : Comment ajouter une route personnalisée à Discourse à l'aide d'un plugin, y compris un exemple minimal avec plugin.rb, un contrôleur personnalisé et le code nécessaire pour enregistrer la route Rails ?

Lecture

Lecture : Développement de plugins Discourse - Partie 1 - Créer un plugin de base

Recherche

Recherche de : Preuve de concept minimale pour l'ajout d'une route Rails personnalisée dans un plugin Discourse, y compris plugin.rb, l'implémentation du contrôleur et le code pour enregistrer la route.

Lecture

Lecture : Création de routes dans Discourse et affichage de données

Lecture

Lecture : Ajouter des routes utilisateur personnalisées à l'aide de plugins

Lecture

Lecture : Ajouter un contrôleur ruby via un plugin

Voici une preuve de concept minimale pour ajouter une route Rails personnalisée à Discourse via un plugin, y compris les fichiers clés dont vous aurez besoin : plugin.rb, un contrôleur et le code pour enregistrer la route.

Points clés

  • La meilleure pratique consiste à utiliser un "moteur" Rails au sein de votre plugin pour isoler vos contrôleurs et vos routes.
  • Vous devez explicitement inclure votre contrôleur dans plugin.rb.
  • Pour enregistrer une nouvelle route, vous utilisez la méthode routes.draw du moteur et montez le moteur dans les routes principales de l’application.

Exemple minimal

plugin.rb

# name: my-custom-route
# about: Ajoute une route personnalisée via un moteur Rails dans un plugin
# version: 0.1
# authors: Votre Nom

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

Comment cela fonctionne :

  • GET /my_plugin/hello renverra la réponse texte brut "Hello from my plugin!".

Structure de répertoire requise :

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

Pour plus de détails et des exemples étendus, consultez :

Cette preuve de concept vous aidera à ajouter un point d’accès personnalisé simple à votre instance Discourse via un plugin. Si vous avez des questions sur l’intégration de cela avec le côté Ember/JS, faites-le moi savoir !

1 « J'aime »

OK. Merci. Il semble que ce bout de code ait été ajouté à routes.rb, mais je vais examiner les plugins principaux et voir si je peux trouver un exemple dans plugins.rb. Merci !

1 « J'aime »