Je souhaite diviser le fichier de définition de routage config / routes.rb en plusieurs fichiers. Plus précisément, j'ai un fichier appelé lib / my_app / routes.rb et je veux le lire.
L'article de 2015 https://y-yagi.tumblr.com/post/118514473965/ est un succès, mais il ne fonctionne pas tel quel. La définition et l'exécution de draw fonctionnent bien, mais elles échouent car le mécanisme de rechargement semble être ancien.
Rails6 a une manière assez organisée de charger les itinéraires afin que vous n'ayez pas à le recharger vous-même. Une classe appelée Rails :: Application :: RoutesReloader est définie avec les paramètres corrects Si vous pouvez le donner, il sera complété. Si vous souhaitez décomposer routes.rb sous config / routes /, la méthode décrite dans l'article ci-dessous semble être bonne.
https://medium.com/rubycademy/how-to-keep-your-routes-clean-in-ruby-on-rails-f7cf348ec13b
Cependant, je ne pouvais lire aucun fichier avec cela, j'ai donc choisi une autre méthode.
Le routage est chargé à ʻadd_routing_paths` dans initializers. J'ai donc pensé qu'il serait bon d'ajouter un chemin juste avant les initialiseurs.
Plus précisément, les paramètres suivants ont été ajoutés à config / application.rb.
config/application.rb
initializer('add_my_app_routing_paths', before: 'add_routing_paths') do |app|
routing_path = root.join('lib/my_app/routes.rb')
app.routes_reloader.paths.prepend(routing_path)
end
Maintenant, comme prévu, les routes définies dans lib / my_app / routes.rb sont chargées. Je ne semblais pas avoir l'effet secondaire de ne pas être rechargé, alors j'ai décidé d'aller avec ça.
Si vous regardez le code source de la branche principale qui n'a pas encore été publié, il ressemble à ce qui suit. écrit.
initializer :add_routing_paths do |app|
routing_paths = paths["config/routes.rb"].existent
external_paths = self.paths["config/routes"].paths
routes.draw_paths.concat(external_paths)
if routes? || routing_paths.any?
app.routes_reloader.paths.unshift(*routing_paths)
app.routes_reloader.route_sets << routes
app.routes_reloader.external_routes.unshift(*external_paths)
end
end
Lorsque je définis une variable appelée external_paths, je sens que si je peux passer le chemin que je veux lire, je peux mieux le définir.
Recommended Posts