Foreign key migration generator for Rails
Immigrant gives Rails a foreign key migration generator so you can effortlessly find and add missing keys. This is particularly helpful when you decide to add keys to an established Rails app.
Add the following to your Gemfile:
gem 'immigrant'
If you're using a version of Rails prior to 4.2, you'll also need the Foreigner gem.
rails generate immigration AddKeys
This will create a migration named AddKeys which will have
add_foreign_keystatements for any missing foreign keys. Immigrant infers missing ones by evaluating the associations in your models (e.g.
belongs_to,
has_many, etc.). Only missing keys will be added; existing ones will never be altered or removed.
To help you remember to add keys in the future, there's a handy rake task you can add to your CI setup. Just run
rake immigrant:check_keys, and if anything is missing it will tell you about it and exit with a non-zero status.
Immigrant.ignore_keysallows you to specify a list of keys that should be ignored (both in the migration generator and the rake task). This is useful if you have associations spanning databases.
Just create an config/initializers/immigrant.rb file with something like the following:
Immigrant.ignore_keys = [ { from_table: "users", column: "account_id" }, # etc ]
If the data in your tables is bad, then the migration will fail to run (obviously). IOW, ensure you don't have orphaned records before you try to add foreign keys.
Immigrant currently only looks for foreign keys in
ActiveRecord::Base's database. So if a model is using a different database connection and it has foreign keys, Immigrant will incorrectly include them again in the generated migration.
Immigrant.ignore_keyscan be used to work around this.
Copyright (c) 2012-2015 Jon Jensen, released under the MIT license