Alfabetik sırayla yalnızca a restaurant_id
ve user_id
(birincil anahtarsız) ayrı bir birleştirme tablosu eklemeniz gerekir .
Öncelikle taşıma işlemlerinizi çalıştırın, ardından oluşturulan taşıma dosyasını düzenleyin.
Raylar 3
rails g migration create_restaurants_users_table
Raylar 4 :
rails g migration create_restaurants_users
Raylar 5
rails g migration CreateJoinTableRestaurantUser restaurants users
Gönderen docs :
JoinTable ismin bir parçasıysa birleştirme tabloları oluşturacak bir jeneratör de vardır:
Taşıma dosyanız (unutmayın :id => false
; birincil anahtarın oluşturulmasını engelleyen şey budur):
Raylar 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
Raylar 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
otomatik olarak gerekli dizinleri oluşturacaktır. def change
ileri veya geri geçişi otomatik olarak algılar, yukarı / aşağıya gerek yoktur.
Raylar 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
Not: Ayrıca create_join_table çağrısına parametre olarak aktarılabilen özel bir tablo adı seçeneği de vardır table_name
. Gönderen docs
Varsayılan olarak, birleştirme tablosunun adı, create_join_table için sağlanan ilk iki bağımsız değişkenin alfabetik sırayla birleşiminden gelir. Tablonun adını özelleştirmek için bir: tablo_adı seçeneği sağlayın: