コントローラーとルート

カスタムコントローラーのセットアップとルーティングに関するチュートリアルに従っているのですが、ルーティングエラーページが表示されます。ページにはパスとコントローラーがリストされており、すべて正しいのですが、リソースをリクエストするとエラーが発生します。古いチュートリアルであることは理解していますが、情報は正確でしょうか?プラグインのスケルトンを添付しましたので、問題解決にご協力いただけると幸いです。よろしくお願いします!

jb-test.zip (522.2 KB)

レールルーティングに追加することが足りない点だと思います。

plugin.rb に以下のような記述を追加します。

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

これはあくまで一例です。その他には、GitHub - discourse/all-the-plugins を見て、そこから学ぶこともできます。ただし、多くの機能がコアに追加された現在では、レールルートへの追加例はそちらで確認できると思います。

Discourse のカスタムルートプラグイン AI

pfaffman:
Discourse のレールにルートを追加するには何が必要ですか?

plugin.rb、コントローラー、およびレールルートへのルート追加に必要なものが含まれた、最小限の概念実証(Proof of Concept)を提供していただけますか?

DiscourseHelper:

検索

検索クエリ: Discourse プラグインを使用してカスタムレールルートを追加する方法。最小限の例(plugin.rb、カスタムコントローラー、ルート登録に必要なコードを含む)を含めて。

読書

読書: Developing Discourse Plugins - Part 1 - Create a basic plugin

検索

検索クエリ: Discourse プラグインにカスタムレールルートを追加するための最小限の概念実証。plugin.rb、コントローラー実装、ルート登録コードを含む。

読書

読書: Creating Routes in Discourse and Showing Data

読書

読書: Add custom user routes using plugins

読書

読書: Adding a ruby controller via plugin

プラグインを介して 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 サイドとの統合について質問があれば、お知らせください!

「いいね!」 1

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!

「いいね!」 1