Comment ajouter une route au chemin racine

Dans mon plugin, j’ai une route définie ainsi dans config/routes.rb :

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

Et je peux exécuter :

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

et obtenir la clé publique comme je le souhaite. :tada:

Ne voulant pas laisser les choses en l’état (et les utilisateurs copieront presque certainement cela, donc 9 caractères supplémentaires ne signifient rien), je souhaite pouvoir exécuter :

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

J’ai examiné de nombreux autres plugins, et il semble que quelque chose comme ceci devrait fonctionner :

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

Cela ne fonctionne pas du tout. Plusieurs tentatives que j’ai faites (j’ai essayé beaucoup de choses et je n’aurais vraiment pas dû perdre de temps sur ce moulin à vent particulier) semblaient bien capturer la route, mais ensuite il me faudrait faire… quelque chose… pour lui indiquer de chercher ce contrôleur dans pfaffmanager/get_pub_key_by_name.

Avez-vous essayé de suivre cela

et de modifier le paramètre at: en conséquence ?

Merci, Rafael ! Cela m’a permis d’y arriver.

En gros, j’ai simplement monté mon plugin à / puis ajouté /pfaffmanager au début des routes dans ....routes.draw. Comme pour la plupart de ces problèmes, la solution devient évidente une fois qu’on la trouve.

L’autre façon de le faire est comme suit :