Você precisa adicionar uma tabela de junção separada com apenas um restaurant_id
e user_id
(sem chave primária), em ordem alfabética .
Primeiro execute suas migrações e, em seguida, edite o arquivo de migração gerado.
Rails 3
rails g migration create_restaurants_users_table
Trilhos 4 :
rails g migration create_restaurants_users
Rails 5
rails g migration CreateJoinTableRestaurantUser restaurants users
Dos documentos :
Há também um gerador que produzirá tabelas de junção se JoinTable fizer parte do nome:
Seu arquivo de migração (observe o :id => false
; é o que impede a criação de uma chave primária):
Rails 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
Rails 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
irá criar automaticamente os índices necessários. def change
irá detectar automaticamente uma migração para frente ou para trás, sem necessidade de up / down.
Rails 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
Nota: Também existe uma opção para um nome de tabela customizado que pode ser passado como um parâmetro para criar_join_tabela chamada table_name
. Dos documentos
Por padrão, o nome da tabela de junção vem da união dos dois primeiros argumentos fornecidos para create_join_table, em ordem alfabética. Para personalizar o nome da tabela, forneça uma opção: table_name: