create_join_table
- 1.0.0
- 1.1.6
- 1.2.6
- 2.0.3
- 2.1.0
- 2.2.1
- 2.3.8
- 3.0.0
- 3.0.9
- 3.1.0
- 3.2.1
- 3.2.8
- 3.2.13
- 4.0.2 (0)
- 4.1.8 (0)
- 4.2.1 (0)
- 4.2.7 (0)
- 4.2.9 (0)
- 5.0.0.1 (0)
- 5.1.7 (1)
- 5.2.3 (0)
- 6.0.0 (0)
- 6.1.3.1 (0)
- 6.1.7.7 (0)
- 7.0.0 (0)
- 7.1.3.2 (0)
- 7.1.3.4 (0)
- 7.2.3 (0)
- 8.0.0 (24)
- 8.1.1 (38)
- What's this?
create_join_table(table_1, table_2, column_options: {}, **options)
public
Creates a new join table with the name created using the lexical order of the first two arguments. These arguments can be a String or a Symbol.
# Creates a table called 'assemblies_parts' with no id. create_join_table(:assemblies, :parts) # Creates a table called 'paper_boxes_papers' with no id. create_join_table('papers', 'paper_boxes')
A duplicate prefix is combined into a single prefix. This is useful for namespaced models like Music::Artist and Music::Record:
# Creates a table called 'music_artists_records' with no id. create_join_table('music_artists', 'music_records')
See {connection.add_reference}[rdoc-ref:SchemaStatements#add_reference] for details of the options you can use in column_options. column_options will be applied to both columns.
You can pass an options hash which can include the following keys:
- :table_name
-
Sets the table name, overriding the default.
- :options
-
Any extra options you want appended to the table definition.
- :temporary
-
Make a temporary table.
- :force
-
Set to true to drop the table before creating it. Defaults to false.
Note that #create_join_table does not create any indices by default; you can use its block form to do so yourself:
create_join_table :products, :categories do |t| t.index :product_id t.index :category_id end
Add foreign keys with delete cascade
create_join_table(:assemblies, :parts, column_options: { foreign_key: { on_delete: :cascade } })
generates:
CREATE TABLE assemblies_parts ( assembly_id bigint NOT NULL, part_id bigint NOT NULL, CONSTRAINT fk_rails_0d8a572d89 FOREIGN KEY ("assembly_id") REFERENCES "assemblies" ("id") ON DELETE CASCADE, CONSTRAINT fk_rails_ec7b48402b FOREIGN KEY ("part_id") REFERENCES "parts" ("id") ON DELETE CASCADE )
Add a backend specific option to the generated SQL (MySQL)
create_join_table(:assemblies, :parts, options: 'ENGINE=InnoDB DEFAULT CHARSET=utf8')
generates:
CREATE TABLE assemblies_parts ( assembly_id bigint NOT NULL, part_id bigint NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8

