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!



![[.NET Error] Update requires a valid UpdateCommand when passed DataRow collection with modified rows](https://www.jeygeethan.com/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MTA2LCJwdXIiOiJibG9iX2lkIn19--e91253d80eb7ffc54f54bf32fb1b812a381fd52f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fZml0IjpbODAwLDgwMF19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--e6e6a0f38c858cc47eaf7fc395a39df3afd3bb47/hPTMJ.png)