aboutsummaryrefslogtreecommitdiffstats
path: root/guides/source/association_basics.md
diff options
context:
space:
mode:
authorKrzysztof Maicher <krzysztof.maicher@gmail.com>2017-03-04 17:26:23 +0100
committerKrzysztof Maicher <krzysztof.maicher@gmail.com>2017-03-06 14:43:10 +0100
commite1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae (patch)
tree34aa84f0d118d3914bf4a1cb51dbb2061e44bb3f /guides/source/association_basics.md
parent145adda5815e910df09af107e9ff97467799e853 (diff)
downloadrails-e1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae.tar.gz
rails-e1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae.tar.bz2
rails-e1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae.zip
Improve foreign key description in guides [ci skip]
Diffstat (limited to 'guides/source/association_basics.md')
-rw-r--r--guides/source/association_basics.md20
1 files changed, 18 insertions, 2 deletions
diff --git a/guides/source/association_basics.md b/guides/source/association_basics.md
index 73c9c10c1f..5794bfa666 100644
--- a/guides/source/association_basics.md
+++ b/guides/source/association_basics.md
@@ -582,14 +582,30 @@ class CreateBooks < ActiveRecord::Migration[5.0]
t.string :book_number
t.integer :author_id
end
-
- add_index :books, :author_id
end
end
```
If you create an association some time after you build the underlying model, you need to remember to create an `add_column` migration to provide the necessary foreign key.
+It's a good practice to add an index on the foreign key to improve queries
+performance and a foreign key constraint to ensure referential data integrity:
+
+```ruby
+class CreateBooks < ActiveRecord::Migration[5.0]
+ def change
+ create_table :books do |t|
+ t.datetime :published_at
+ t.string :book_number
+ t.integer :author_id
+ end
+
+ add_index :books, :author_id
+ add_foreign_key :books, :authors
+ end
+end
+```
+
#### Creating Join Tables for `has_and_belongs_to_many` Associations
If you create a `has_and_belongs_to_many` association, you need to explicitly create the joining table. Unless the name of the join table is explicitly specified by using the `:join_table` option, Active Record creates the name by using the lexical book of the class names. So a join between author and book models will give the default join table name of "authors_books" because "a" outranks "b" in lexical ordering.