Os Rails Engines são mini-aplicações empacotadas como Ruby gems que fornecem seus próprios modelos, controllers, views, rotas e migrações.
Gerando um Plugin Rails Engine
# Gerar um motor montável com namespace isolado
bin/rails plugin new my_engine --mountable --skip-bundle
Arquitetura do Engine
Em 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
Montagem na Aplicação Hospedeira
No arquivo config/routes.rb da aplicação hospedeira:
Rails.application.routes.draw do
mount MyEngine::Engine => "/blog"
end
Migrações do Engine
Para copiar as migrações do engine para a aplicação principal:
bin/rails my_engine:install:migrations
bin/rails db:migrate