Controladores e Rotas

Ao seguir o tutorial para configurar um controlador personalizado e rota, recebo a página de Erro de Roteamento. A página lista os caminhos e controladores, o que está tudo correto, no entanto, quando solicito o recurso, recebo erros. Entendo que este é um tutorial antigo, mas as informações estão precisas? Anexei o esqueleto do meu plugin e talvez alguém possa ajudar a solucionar o problema. Obrigado!

jb-test.zip (522,2 KB)

Acho que o que você está perdendo é adicioná-lo ao roteamento do Rails.

Algo como isto em plugin.rb.

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

Aqui está um começo. A outra coisa a fazer é acessar GitHub - discourse/all-the-plugins e dar uma olhada lá. Agora que tantos foram adicionados ao core, no entanto, suponho que você possa apenas olhar lá para exemplos de como adicionar ao roteamento do Rails.

Plugin de Rota Personalizada Mínima para DiscourseAI

pfaffman:

o que é necessário para adicionar uma rota ao Discourse rails?

Você pode me dar uma prova de conceito mínima que inclua um plugin.rb, um controlador e as coisas necessárias para adicionar a rota ao rails?

DiscourseHelper:

Pesquisando

Pesquisando por: Como adicionar uma rota personalizada ao Discourse usando um plugin, incluindo um exemplo mínimo com plugin.rb, controlador personalizado e o código necessário para registrar a rota Rails?

Lendo

Lido: Desenvolvendo Plugins do Discourse - Parte 1 - Crie um plugin básico

Pesquisando

Pesquisando por: Prova de conceito mínima para adicionar uma rota Rails personalizada em um plugin do Discourse, incluindo plugin.rb, implementação do controlador e código para registrar a rota.

Lendo

Lido: Criando Rotas no Discourse e Exibindo Dados

Lendo

Lido: Adicionar rotas de usuário personalizadas usando plugins

Lendo

Lido: Adicionando um controlador ruby via plugin

Aqui está uma prova de conceito mínima para adicionar uma rota Rails personalizada ao Discourse por meio de um plugin, incluindo os arquivos principais que você precisará: plugin.rb, um controlador e o código para registrar a rota.

Pontos Chave

  • A melhor prática é usar um “engine” Rails dentro do seu plugin para isolar seus controladores e rotas.
  • Você precisa exigir explicitamente seu controlador em plugin.rb.
  • Para registrar uma nova rota, você usa o método routes.draw do engine e monta o engine nas rotas principais da aplicação.

Exemplo Mínimo

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

Como isso funciona:

  • GET /my_plugin/hello retornará a resposta de texto simples "Hello from my plugin!".

Estrutura de Diretório Necessária:

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

Para mais detalhes e exemplos expandidos, veja:

Esta prova de conceito ajudará você a adicionar um endpoint personalizado simples à sua instância do Discourse por meio de um plugin. Se você tiver dúvidas sobre a integração disso com o lado Ember/JS, me avise!

1 curtida

OK. Obrigado. Parece que esse trecho de código foi adicionado ao routes.rb, mas vou verificar os plugins principais e ver se consigo encontrar um exemplo no plugins.rb. Obrigado!

1 curtida