mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
Add Create A Join Table With The Migration DSL as a rails til
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://tinyletter.com/jbranchaud).
|
For a steady stream of TILs, [sign up for my newsletter](https://tinyletter.com/jbranchaud).
|
||||||
|
|
||||||
_1093 TILs and counting..._
|
_1094 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -661,6 +661,7 @@ _1093 TILs and counting..._
|
|||||||
- [Convert A Symbol To A Constant](rails/convert-a-symbol-to-a-constant.md)
|
- [Convert A Symbol To A Constant](rails/convert-a-symbol-to-a-constant.md)
|
||||||
- [Count The Number Of Records By Attribute](rails/count-the-number-of-records-by-attribute.md)
|
- [Count The Number Of Records By Attribute](rails/count-the-number-of-records-by-attribute.md)
|
||||||
- [Create A Custom Named References Column](rails/create-a-custom-named-references-column.md)
|
- [Create A Custom Named References Column](rails/create-a-custom-named-references-column.md)
|
||||||
|
- [Create A Join Table With The Migration DSL](rails/create-a-join-table-with-the-migration-dsl.md)
|
||||||
- [Creating Records of Has_One Associations](rails/creating-records-of-has-one-associations.md)
|
- [Creating Records of Has_One Associations](rails/creating-records-of-has-one-associations.md)
|
||||||
- [Custom Validation Message](rails/custom-validation-message.md)
|
- [Custom Validation Message](rails/custom-validation-message.md)
|
||||||
- [Customize Paths And Helpers For Devise Routes](rails/customize-paths-and-helpers-for-devise-routes.md)
|
- [Customize Paths And Helpers For Devise Routes](rails/customize-paths-and-helpers-for-devise-routes.md)
|
||||||
|
|||||||
39
rails/create-a-join-table-with-the-migration-dsl.md
Normal file
39
rails/create-a-join-table-with-the-migration-dsl.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Create A Join Table With The Migration DSL
|
||||||
|
|
||||||
|
The Rails migration DSL comes with a helper for creating a join table between
|
||||||
|
two other existing tables.
|
||||||
|
|
||||||
|
Call `create_join_table` with two arguments, symbols for the names of the two
|
||||||
|
tables.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
def change
|
||||||
|
create_join_table :tags, :posts
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a table with id references columns to each of the tables. The
|
||||||
|
`db/schema.rb` addition will look something like this:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
create_table "posts_tags", id: false, force: :cascade do |t|
|
||||||
|
t.bigint "tag_id", null: false
|
||||||
|
t.bigint "post_id", null: false
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
A Rails/ActiveRecord convention that comes into play for the creation of this
|
||||||
|
table.
|
||||||
|
|
||||||
|
1. The name should be the pluralized versions of the two joined table names.
|
||||||
|
2. The joined table names should show up in the table name in alphabetical
|
||||||
|
order.
|
||||||
|
|
||||||
|
Notice that despite listing `:tags` before `:posts` it creates a table called
|
||||||
|
`posts_tags`. The DSL handles that for us.
|
||||||
|
|
||||||
|
Some `create_join_table` defaults to be aware of:
|
||||||
|
|
||||||
|
- It doesn't generate foreign key constraints.
|
||||||
|
- It uses `bigint` (or `int`) for the keys (even if those tables use UUIDs).
|
||||||
|
- The references are named after their respective table names.
|
||||||
Reference in New Issue
Block a user