我认为你遗漏的是将其添加到 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?
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
Reading
Reading
这是一个通过插件向 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
更多详细信息和扩展示例,请参阅:
- Creating Routes in Discourse and Showing Data
- Adding a ruby controller via plugin
- Add custom user routes using plugins
这个概念验证将帮助您通过插件向 Discourse 实例添加一个简单的自定义端点。如果您有关于将其与 Ember/JS 端集成的问题,请告诉我!