J'ai constaté ce qui suit :
Moteur complet
Avec un moteur complet, l'application mère hérite des routes du moteur. Il n'est pas nécessaire de spécifier quoi que ce soit dans parent_app/config/routes.rb
. Il suffit de spécifier la gem dans le fichier Gemfile pour que l'application parente hérite des modèles, des routes, etc. Les routes du moteur sont spécifiées comme suit :
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
Pas d'espacement des noms des modèles, des contrôleurs, etc. Ceux-ci sont immédiatement immédiatement accessibles à l'application mère.
Moteur montable
L'espace de noms du moteur est isolé par défaut :
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
Avec un moteur montable, les routes sont nommées et l'application mère peut regrouper cette fonctionnalité sous une seule route :
# my_engine/config/routes.rb
MyEngine::Engine.routes.draw do
#whatever
end
# parent_app/config/routes.rb
ParentApp::Application.routes.draw do
mount MyEngine::Engine => "/engine", :as => "namespaced"
end
Les modèles, les contrôleurs, etc. sont isolés de l'application mère - bien que les aides puissent être facilement partagées.
Voici les principales différences que j'ai relevées. Peut-être y en a-t-il d'autres ? J'ai demandé à plus de aquí mais n'a pas encore reçu de réponse.
J'ai l'impression que puisqu'un moteur complet ne s'isole pas de l'application mère, il est préférable de l'utiliser en tant qu'application autonome adjacente à l'application mère. Je pense que des conflits de noms pourraient se produire.
Un moteur montable peut être utilisé dans les situations où vous souhaitez éviter les conflits de noms et regrouper le moteur sous une route spécifique dans l'application mère. Par exemple, je travaille à la construction de mon premier moteur conçu pour le service à la clientèle. L'application mère pourrait regrouper ses fonctionnalités sous une seule route, par exemple :
mount Cornerstone::Engine => "/cornerstone", :as => "help"
Si mes hypothèses sont erronées, que quelqu'un me le fasse savoir et je corrigerai cette réponse. J'ai rédigé un petit article sur le sujet aquí .