Have you ever worked on building a Rails Engine and wanted to keep the models, the migrations and everything inside the engine rather than using a generator to copy paste them into your host Rails App? That's a problem everybody faces one time or the other when building Rails Engines to abstract out your huge Rails App. I have found one such solutions that can be helpful for you to keep them separate. Here is a solution for it.
Problem Statement:
Instead of using
rails g my_engine:install
to copy paste the migrations from engine to your rails app, you want to just keep the migrations inside the Rails Engine and do not bother about it.
Solution:
Add the following lines to your engine, so that your engine's migration files are added to the rails app as well.
module MyEngine class Engine < ::Rails::Engine isolate_namespace MyEngine initializer :append_migrations do |app| unless app.root.to_s.match root.to_s config.paths["db/migrate"].expanded.each do |expanded_path| app.config.paths["db/migrate"] << expanded_path end end end end end
Now you can do the following from your rails app to run your migrations as you always do:
rake db:migrate
Hope it helps you! If it does help you, give me a shoutout below!