File: README.md

package info (click to toggle)
ruby-foreigner 1.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 212 kB
  • ctags: 127
  • sloc: ruby: 720; makefile: 3
file content (94 lines) | stat: -rw-r--r-- 2,829 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# Foreigner
[![Build Status](https://travis-ci.org/matthuhiggins/foreigner.png)](https://travis-ci.org/matthuhiggins/foreigner) [![Code Climate](https://codeclimate.com/github/matthuhiggins/foreigner.png)](https://codeclimate.com/github/matthuhiggins/foreigner)

Foreigner introduces a few methods to your migrations for adding and removing foreign key constraints. It also dumps foreign keys to `schema.rb`.

The following adapters are supported:

* mysql2
* postgres
* sqlite (foreign key methods are a no-op)

## Installation

Add the following to your Gemfile:
```ruby
  gem 'foreigner'
```
## API Examples

Foreigner adds two methods to migrations.

* `add_foreign_key(from_table, to_table, options)`
* `remove_foreign_key(from_table, options)`

(Options are documented in `connection_adapters/abstract/schema_statements.rb`):

For example, given the following model:
```ruby
  class Comment < ActiveRecord::Base
    belongs_to :post
  end

  class Post < ActiveRecord::Base
    has_many :comments, dependent: :delete_all
  end
```  
You should add a foreign key in your migration:
```ruby
  add_foreign_key(:comments, :posts)
```
The `:dependent` option can be moved from the `has_many` definition to the foreign key:
```ruby
  add_foreign_key(:comments, :posts, dependent: :delete)
```
If the column is named `article_id` instead of `post_id`, use the `:column` option:
```ruby
  add_foreign_key(:comments, :posts, column: 'article_id')
```
A name can be specified for the foreign key constraint:
```ruby
  add_foreign_key(:comments, :posts, name: 'comment_article_foreign_key')
```
The `:column` and `:name` options create a foreign key with a custom name. In order to remove it you need to specify `:name`:
```ruby
  remove_foreign_key(:comments, name: 'comment_article_foreign_key')
```
## Change Table Methods

Foreigner adds extra methods to `create_table` and `change_table`.

Create a new table with a foreign key:
```ruby
  create_table :products do |t|
    t.string :name
    t.integer :factory_id
    t.foreign_key :factories
  end
```
Add a missing foreign key to comments:
```ruby
  change_table :comments do |t|
    t.foreign_key :posts, dependent: :delete
  end
```
Remove an unwanted foreign key:
```ruby
  change_table :comments do |t|
    t.remove_foreign_key :users
  end
```
## Database-specific options

Database-specific options will never be supported by foreigner. You can add them using `:options`:
```ruby
  add_foreign_key(:comments, :posts, options: 'ON UPDATE DEFERRED')
```
## Foreigner Add-ons

* [immigrant](https://github.com/jenseng/immigrant) - generate a migration that includes all missing foreign keys.
* [sqlserver-foreigner](https://github.com/cleblanc87/sqlserver-foreigner) - A plugin for SQL Server.

## License

Copyright (c) 2012 Matthew Higgins, released under the MIT license