Вам потрібно додати окрему таблицю приєднання з лише a 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
; саме це перешкоджає створенню первинного ключа):
Рейки 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
автоматично виявить міграцію вперед або назад, не потрібно вгору / вниз.
Рейки 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
Примітка. Існує також опція для імені користувальницької таблиці, яку можна передавати як параметр для створення_join_table, що викликається table_name
. Від док
За замовчуванням назва таблиці приєднання походить від об'єднання перших двох аргументів, передбачених create_join_table, в алфавітному порядку. Щоб налаштувати назву таблиці, надайте параметр: table_name: