Вам нужно добавить отдельную таблицу соединений только с restaurant_id
и user_id
(без первичного ключа) в в алфавитном порядке .
Сначала запустите миграцию, затем отредактируйтесгенерированный файл миграции.
Рельсы 3
rails g migration create_restaurants_users_table
Рельсы 4 :
rails g migration create_restaurants_users
Рельсы 5
rails g migration CreateJoinTableRestaurantUser restaurants users
Из документов :
Существует также генератор, который будет создавать таблицы соединений, если JoinTable является частью имени:
Ваш файл миграции (обратите внимание на :id => false
; это то, что предотвращает создание первичного ключа):
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
Рельсы 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
автоматически создадут необходимые индексы.def change
автоматически обнаружит миграцию вперед или откат, нет необходимости в повышении / понижении.
Rails 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
Примечание. Существует также опция дляпроизвольное имя таблицы, которое можно передать в качестве параметра в create_join_table с именем table_name
.Из документов
По умолчанию имя таблицы объединения происходит из объединения первых двух аргументов, предоставленных для create_join_table, в алфавитном порядке.Чтобы настроить имя таблицы, укажите параметр: table_name: