diff options
author | Krzysztof Maicher <krzysztof.maicher@gmail.com> | 2017-03-04 17:26:23 +0100 |
---|---|---|
committer | Krzysztof Maicher <krzysztof.maicher@gmail.com> | 2017-03-06 14:43:10 +0100 |
commit | e1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae (patch) | |
tree | 34aa84f0d118d3914bf4a1cb51dbb2061e44bb3f | |
parent | 145adda5815e910df09af107e9ff97467799e853 (diff) | |
download | rails-e1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae.tar.gz rails-e1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae.tar.bz2 rails-e1567d0d3a3c0ae1f4da1fb8b5b77a85767fb6ae.zip |
Improve foreign key description in guides [ci skip]
-rw-r--r-- | guides/source/association_basics.md | 20 |
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. |