Debe agregar una tabla de combinación separada con solo un restaurant_id
y user_id
(sin clave principal), en orden alfabético .
Primero ejecute sus migraciones, luego edite el archivo de migración generado.
Carriles 3
rails g migration create_restaurants_users_table
Carriles 4 :
rails g migration create_restaurants_users
Carriles 5
rails g migration CreateJoinTableRestaurantUser restaurants users
De los documentos :
También hay un generador que producirá tablas de unión si JoinTable es parte del nombre:
Su archivo de migración (tenga en cuenta :id => false
; es lo que impide la creación de una clave principal):
Carriles 3
class CreateRestaurantsUsers < ActiveRecord::Migration
def self.up
create_table :restaurants_users, :id => false do |t|
t.references :restaurant
t.references :user
end
add_index :restaurants_users, [:restaurant_id, :user_id]
add_index :restaurants_users, :user_id
end
def self.down
drop_table :restaurants_users
end
end
Carriles 4
class CreateRestaurantsUsers < ActiveRecord::Migration
def change
create_table :restaurants_users, id: false do |t|
t.belongs_to :restaurant
t.belongs_to :user
end
end
end
t.belongs_to
creará automáticamente los índices necesarios. def change
detectará automáticamente una migración hacia adelante o hacia atrás, sin necesidad de subir / bajar.
Carriles 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
Nota: También hay una opción para un nombre de tabla personalizado que se puede pasar como un parámetro para llamar a create_join_table table_name
. De los documentos
De forma predeterminada, el nombre de la tabla de combinación proviene de la unión de los dos primeros argumentos proporcionados para create_join_table, en orden alfabético. Para personalizar el nombre de la tabla, proporcione una opción: table_name: