Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jenseng/immigrant

Foreign key migration generator for Rails
https://github.com/jenseng/immigrant

Last synced: 1 day ago
JSON representation

Foreign key migration generator for Rails

Awesome Lists containing this project

README

        

# Immigrant
[](http://travis-ci.org/jenseng/immigrant)

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.

## Installation

Add the following to your Gemfile:

```ruby
gem 'immigrant'
```

If you're using a version of Rails prior to 4.2, you'll also need the
[Foreigner](https://github.com/matthuhiggins/foreigner) gem.

## Usage

```bash
rails generate immigration AddKeys
```

This will create a migration named AddKeys which will have `add_foreign_key`
statements 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.

### Rake Task

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.

### Skipping associations

`Immigrant.ignore_keys` allows 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:

```ruby
Immigrant.ignore_keys = [
{ from_table: "users", column: "account_id" },
# etc
]
```

## Considerations

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.

## Known Issues

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_keys` can be used to work around this.

## [Changelog](CHANGELOG.md)

## License

Copyright (c) 2012-2015 Jon Jensen, released under the MIT license