ルートパスにルートを追加する方法

プラグイン内では、config/routes.rb に以下のようなルートが定義されています:

Pfaffmanager::Engine.routes.draw do
  get "/ssh-key/:hostname" => "serverkeys#get_pub_key_by_hostname", constraints: { end

これにより、以下のように実行すると期待通りに公開鍵を取得できます。

curl https://www.pfaffmanager.com/pfaffmanager/ssh-key/test.myforum.us

完璧な状態を放置できない性格上(また、ユーザーはほぼ確実にこれをコピー&ペーストするため、9 文字の差は問題ありません)、以下のようにもアクセスできるようにしたいと考えています。

curl https://www.pfaffmanager.com/ssh-key/test.myforum.us

他のプラグインをいくつか調べてみたところ、以下のような実装で動作するはずだと思われます:

Discourse::Application.routes.prepend do
  get "/ssh-key/:hostname" => "serverkeys#get_pub_key_by_hostname", constraints: { hostname: /[^\/]+/ }
end

しかし、これは全く機能しません。いくつか試したことがあります(多くのことを試しましたが、この風車に時間を費やすべきではなかったと後悔しています)。一見するとルートが正しくマッチしているように見えたものの、その後 pfaffmanager/get_pub_key_by_name のコントローラーを参照させるために何らかの処理を追加する必要がありました。

この手順を試しましたか?

そして、at: パラメータを適切に変更しましたか?

「いいね!」 2

ありがとうございます、ラファエル!おかげで解決できました。

要するに、プラグインを / にマウントし、....routes.draw 内のルートに /pfaffmanager を先頭に追加しただけです。こうした問題の多くと同様、答えを見つけると、なぜかとても obvious に見えます。

「いいね!」 2

別の方法は以下の通りです:

「いいね!」 1