控制器和路由

在遵循设置自定义控制器和路由的教程时,我遇到了路由错误页面。该页面列出了所有正确的路径和控制器,但是,当我请求资源时,会出现错误。我知道这是一个旧教程,但其中的信息准确吗?我附上了我的插件骨架,也许有人可以帮助解决这个问题。谢谢!

jb-test.zip (522.2 KB)

我认为你遗漏的是将其添加到 rails 路由中。

plugin.rb 中添加类似以下内容。

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

这是一个开始。另一件事是查看 GitHub - discourse/all-the-plugins 并从中进行研究。现在有这么多内容已添加到核心中,我想你可以只在那里查找添加到 Rails 路由的示例。

Minimal Custom Route Plugin for DiscourseAI

pfaffman:

在 Discourse rails 中添加路由需要什么?

你能给我一个最小的概念验证,包括一个 plugin.rb、一个控制器以及添加路由到 rails 所需的内容吗?

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

这是一个通过插件向 Discourse 添加自定义 Rails 路由的最小概念验证,包括您需要的主要文件:plugin.rb、一个控制器以及用于注册路由的代码。

要点

  • 最佳做法是使用插件内的 Rails “引擎”来隔离您的控制器和路由。
  • 您需要在 plugin.rb 中显式要求您的控制器。
  • 要注册新路由,您需要使用引擎的 routes.draw 方法,并将引擎挂载到主应用程序路由中。

最小示例

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

工作原理:

  • GET /my_plugin/hello 将返回纯文本响应 "Hello from my plugin!"

所需目录结构:

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

更多详细信息和扩展示例,请参阅:

这个概念验证将帮助您通过插件向 Discourse 实例添加一个简单的自定义端点。如果您有关于将其与 Ember/JS 端集成的问题,请告诉我!

1 个赞

好的。谢谢。看起来那段代码被添加到了 routes.rb 中,但我会查看核心插件,看看是否能在 plugins.rb 中找到示例。谢谢!

1 个赞