@@ -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
classCreateBooks<ActiveRecord::Migration[5.0]
defchange
create_table:booksdo|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.