당신이 놓치고 있는 부분은 Rails 라우팅에 추가하는 것입니다.
plugin.rb에 다음과 같은 코드를 추가하면 됩니다.
JbTest::Engine.routes.draw do
get "/hello" => "jbtest#index"
end
이것으로 시작할 수 있습니다. 해야 할 다른 일은 GitHub - discourse/all-the-plugins · GitHub 저장소를 받아서 살펴보는 것입니다. 다만, 많은 것들이 이제 코어에 추가되었으므로, Rails 라우트에 추가된 예시를 코어에서 확인하는 것도 좋습니다.
Discourse용 최소 커스텀 라우트 플러그인 AI
pfaffman:
Discourse rails에 라우트를 추가하려면 무엇이 필요한가요?
plugin.rb, 컨트롤러, 그리고 rails에 라우트를 추가하는 데 필요한 코드를 포함한 최소한의 개념 증명(minimal proof of concept)을 보여줄 수 있나요?
DiscourseHelper:
검색 중
검색 내용: 플러그인을 사용하여 Discourse에 커스텀 라우트를 추가하는 방법, plugin.rb, 커스텀 컨트롤러, Rails 라우트를 등록하는 데 필요한 코드가 포함된 최소 예시?
검색 중
검색 내용: Discourse 플러그인에서 커스텀 Rails 라우트를 추가하는 최소 개념 증명, plugin.rb, 컨트롤러 구현, 라우트 등록 코드를 포함.
읽는 중
읽는 중
읽는 중
플러그인을 통해 Discourse에 커스텀 Rails 라우트를 추가하는 최소 개념 증명을 제공합니다. 필요한 주요 파일인 plugin.rb, 컨트롤러, 라우트 등록 코드를 포함합니다.
주요 포인트
- 플러그인 내에서 컨트롤러와 라우트를 격리하기 위해 Rails "엔진(engine)"을 사용하는 것이 가장 좋은 관행입니다.
plugin.rb에서 컨트롤러를 명시적으로 require해야 합니다.- 새 라우트를 등록하려면 엔진의
routes.draw메서드를 사용하고 메인 애플리케이션 라우트에 엔진을 마운트(mount)해야 합니다.
최소 예시
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 쪽과 통합하는 방법에 대해 질문이 있다면 알려주세요!