カスタムコントローラーのセットアップとルーティングに関するチュートリアルに従っているのですが、ルーティングエラーページが表示されます。ページにはパスとコントローラーがリストされており、すべて正しいのですが、リソースをリクエストするとエラーが発生します。古いチュートリアルであることは理解していますが、情報は正確でしょうか?プラグインのスケルトンを添付しましたので、問題解決にご協力いただけると幸いです。よろしくお願いします!
jb-test.zip (522.2 KB)
カスタムコントローラーのセットアップとルーティングに関するチュートリアルに従っているのですが、ルーティングエラーページが表示されます。ページにはパスとコントローラーがリストされており、すべて正しいのですが、リソースをリクエストするとエラーが発生します。古いチュートリアルであることは理解していますが、情報は正確でしょうか?プラグインのスケルトンを添付しましたので、問題解決にご協力いただけると幸いです。よろしくお願いします!
jb-test.zip (522.2 KB)
レールルーティングに追加することが足りない点だと思います。
plugin.rb に以下のような記述を追加します。
JbTest::Engine.routes.draw do
get "/hello" => "jbtest#index"
end
これはあくまで一例です。その他には、GitHub - discourse/all-the-plugins を見て、そこから学ぶこともできます。ただし、多くの機能がコアに追加された現在では、レールルートへの追加例はそちらで確認できると思います。
pfaffman:
Discourse のレールにルートを追加するには何が必要ですか?
plugin.rb、コントローラー、およびレールルートへのルート追加に必要なものが含まれた、最小限の概念実証(Proof of Concept)を提供していただけますか?
DiscourseHelper:
検索クエリ: Discourse プラグインを使用してカスタムレールルートを追加する方法。最小限の例(plugin.rb、カスタムコントローラー、ルート登録に必要なコードを含む)を含めて。
検索クエリ: Discourse プラグインにカスタムレールルートを追加するための最小限の概念実証。plugin.rb、コントローラー実装、ルート登録コードを含む。
プラグインを介して Discourse にカスタムレールルートを追加するための、必要な主要ファイル(plugin.rb、コントローラー、ルート登録コード)を含む最小限の概念実証を以下に示します。
主なポイント
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 サイドとの統合について質問があれば、お知らせください!
OK. Thank you. It looks like that bit of code was added to routes.rb but, I’ll look through the core plugins and see if I can find an example in plugins.rb. Thanks!