Controladores y Rutas

Al seguir el tutorial para configurar un controlador personalizado y una ruta, obtengo la página de Error de Enrutamiento. La página enumera las rutas y los controladores, lo cual es correcto, sin embargo, cuando solicito el recurso, obtengo errores. Entiendo que este es un tutorial antiguo, pero ¿es precisa la información? He adjuntado el esqueleto de mi plugin y tal vez alguien pueda ayudar a solucionar el problema. ¡Gracias!

jb-test.zip (522.2 KB)

Creo que lo que te falta es añadirlo al enrutamiento de Rails.

Algo como esto en plugin.rb.

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

Aquí tienes un comienzo. La otra cosa que debes hacer es ir a GitHub - discourse/all-the-plugins y mirar allí. Sin embargo, ahora que tantos se han añadido al núcleo, supongo que podrías mirar allí para ver ejemplos de cómo se añaden a la ruta de Rails.

Ruta de plugin personalizada mínima para DiscourseAI

pfaffman:

¿Qué se necesita para añadir una ruta a Discourse rails?

¿Puedes darme una prueba de concepto mínima que incluya un plugin.rb, un controlador y las cosas necesarias para añadir la ruta a rails?

DiscourseHelper:

Buscando

Buscando: Cómo añadir una ruta personalizada a Discourse usando un plugin, incluyendo un ejemplo mínimo con plugin.rb, controlador personalizado y el código necesario para registrar la ruta de Rails.

Leyendo

Leído: Desarrollo de plugins de Discourse - Parte 1 - Crear un plugin básico

Buscando

Buscando: Prueba de concepto mínima para añadir una ruta personalizada de Rails en un plugin de Discourse que incluya plugin.rb, implementación del controlador y código para registrar la ruta.

Leyendo

Leído: Creación de rutas en Discourse y visualización de datos

Leyendo

Leído: Añadir rutas de usuario personalizadas usando plugins

Leyendo

Leído: Añadir un controlador ruby a través de un plugin

Aquí tienes una prueba de concepto mínima para añadir una ruta personalizada de Rails a Discourse a través de un plugin, incluyendo los archivos clave que necesitarás: plugin.rb, un controlador y el código para registrar la ruta.

Puntos clave

  • La mejor práctica es utilizar un “engine” de Rails dentro de tu plugin para aislar tus controladores y rutas.
  • Debes requerir explícitamente tu controlador en plugin.rb.
  • Para registrar una nueva ruta, utilizas el método routes.draw del engine y montas el engine en las rutas principales de la aplicación.

Ejemplo mínimo

plugin.rb

# name: my-custom-route
# about: Añade una ruta personalizada a través de un engine de Rails en un plugin
# version: 0.1
# authors: Tu Nombre

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: "¡Hola desde mi plugin!"
    end
  end
end

Cómo funciona:

  • GET /my_plugin/hello devolverá la respuesta de texto plano "¡Hola desde mi plugin!".

Estructura de directorios requerida:

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

Para más detalles y ejemplos ampliados, consulta:

Esta prueba de concepto te ayudará a añadir un punto final personalizado simple a tu instancia de Discourse a través de un plugin. Si tienes preguntas sobre cómo integrar esto con el lado de Ember/JS, ¡házmelo saber!

1 me gusta

OK. Gracias. Parece que ese fragmento de código se añadió a routes.rb, pero revisaré los plugins principales y veré si puedo encontrar un ejemplo en plugins.rb. ¡Gracias!

1 me gusta