Specially useful for has_and_belongs_to_many
relation, you can manually create a join table using the create_table
method.
Suppose you have two models Tags
and Proyects
, and you'd like to associate them using a has_and_belongs_to_many
relation. You need a join table to associate instances of both classes.
class CreateProjectsTagsJoinTableMigration < ActiveRecord::Migration
def change
create_table :projects_tags, id: false do |t|
t.integer :project_id
t.integer :tag_id
end
end
end
The actual name of the table needs to follow this convention: the model which alphabetically precedes the other must go first. Project preceds Tags so the name of the table is projects_tags.
Also since the purpose of this table is to route the association between the instances of two models, the actual id of every record in this table is not necessary. You specify this by passing id: false
Finally, as is convention in Rails, the table name must be the compound plural form of the individual models, but the column of the table must be in singular form.