Les Rails Engines sont des mini-applications packagées sous forme de gems Ruby fournissant leurs propres modèles, contrôleurs, vues, routes et migrations.
Générer un moteur Rails (Engine)
# Générer un moteur montable complet avec espace de noms isolé
bin/rails plugin new my_engine --mountable --skip-bundle
Architecture du moteur
Dans lib/my_engine/engine.rb :
module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
initializer "my_engine.assets" do |app|
app.config.assets.precompile += %w[my_engine/application.css]
end
end
end
Montage dans l'application hôte
Dans le fichier config/routes.rb de l'application hôte :
Rails.application.routes.draw do
mount MyEngine::Engine => "/blog"
end
Migrations du moteur
Pour copier les migrations du moteur dans l'application hôte :
bin/rails my_engine:install:migrations
bin/rails db:migrate