Controller e Route

Seguendo il tutorial per la configurazione di un controller personalizzato e route, ottengo la pagina di errore di routing. La pagina elenca i percorsi e i controller, il che è corretto, tuttavia, quando richiedo la risorsa, ricevo degli errori. Capisco che questo è un vecchio tutorial, ma le informazioni sono accurate? Ho allegato lo scheletro del mio plugin e forse qualcuno può aiutarmi a risolvere il problema. Grazie!

jb-test.zip (522,2 KB)

Penso che la cosa che ti manca sia aggiungerlo al routing di Rails.

Qualcosa del genere in plugin.rb.

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

Ecco un inizio. L’altra cosa da fare è andare su GitHub - discourse/all-the-plugins e dare un’occhiata. Ora che molti sono stati aggiunti al core, suppongo che potresti semplicemente guardare lì per esempi di aggiunte al route di Rails.

Minimal Custom Route Plugin for Discourse AI

pfaffman:

cosa serve per aggiungere una route a Discourse rails?

Puoi darmi una prova di concetto minima che includa un plugin.rb, un controller e le cose necessarie per aggiungere la route a rails?

DiscourseHelper:

Ricerca

Ricerca per: Come aggiungere una route personalizzata a Discourse tramite un plugin, incluso un esempio minimo con plugin.rb, controller personalizzato e il codice necessario per registrare la route Rails?

Lettura

Letto: Sviluppare plugin Discourse - Parte 1 - Creare un plugin di base

Ricerca

Ricerca per: Prova di concetto minima per l'aggiunta di una route Rails personalizzata in un plugin Discourse, inclusi plugin.rb, implementazione del controller e codice per registrare la route.

Lettura

Letto: Creare route in Discourse e mostrare dati

Lettura

Letto: Aggiungere route utente personalizzate tramite plugin

Lettura

Letto: Aggiungere un controller ruby tramite plugin

Ecco una prova di concetto minima per aggiungere una route Rails personalizzata a Discourse tramite un plugin, inclusi i file chiave di cui avrai bisogno: plugin.rb, un controller e il codice per la registrazione della route.

Punti chiave

  • La best practice è utilizzare un “engine” Rails all’interno del tuo plugin per isolare i tuoi controller e le tue route.
  • Devi richiedere esplicitamente il tuo controller in plugin.rb.
  • Per registrare una nuova route, utilizzi il metodo routes.draw dell’engine e monti l’engine nelle route principali dell’applicazione.

Esempio minimo

plugin.rb

# name: my-custom-route
# about: Aggiunge una route personalizzata tramite engine Rails in un 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

Come funziona:

  • GET /my_plugin/hello restituirà la risposta in testo semplice "Hello from my plugin!".

Struttura delle directory richiesta:

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

Per maggiori dettagli ed esempi ampliati, vedi:

Questa prova di concetto ti aiuterà ad aggiungere un semplice endpoint personalizzato alla tua istanza Discourse tramite un plugin. Se hai domande sull’integrazione di questo con il lato Ember/JS, fammelo sapere!

1 Mi Piace

OK. Grazie. Sembra che quel pezzo di codice sia stato aggiunto a routes.rb ma controllerò i plugin principali per vedere se riesco a trovare un esempio in plugins.rb. Grazie!

1 Mi Piace