Sie müssen eine separate Join-Tabelle hinzufügen, die nur eine restaurant_id
y user_id
(kein Primärschlüssel), in alphabetische Reihenfolge .
Führen Sie zunächst Ihre Migrationen durch und bearbeiten Sie dann die erzeugte Migrationsdatei.
Schiene 3
rails g migration create_restaurants_users_table
Schienen 4 :
rails g migration create_restaurants_users
Schiene 5
rails g migration CreateJoinTableRestaurantUser restaurants users
Von der docs :
Es gibt auch einen Generator, der Join-Tabellen erzeugt, wenn JoinTable Teil des Namens ist:
Ihre Migrationsdatei (beachten Sie die :id => false
; dies verhindert die Erstellung eines Primärschlüssels):
Schiene 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
Schienen 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
werden automatisch die erforderlichen Indizes erstellt. def change
erkennt automatisch eine Vorwärts- oder Rückwärtsmigration, ohne dass eine Auf- oder Abwärtsbewegung erforderlich ist.
Schiene 5
create_join_table :restaurants, :users do |t|
t.index [:restaurant_id, :user_id]
end
Hinweis: Es gibt auch eine Option für einen benutzerdefinierten Tabellennamen, der als Parameter an create_join_table übergeben werden kann. table_name
. Von der docs
Standardmäßig ergibt sich der Name der Join-Tabelle aus der Vereinigung der ersten beiden Argumente für create_join_table in alphabetischer Reihenfolge Reihenfolge. Um den Namen der Tabelle anzupassen, geben Sie eine :table_name Option an: