Рейки 4.x
Коли ви вже users
і uploads
таблиці і хочете додати нові відносини між ними.
Все, що вам потрібно зробити: просто створити міграцію за допомогою наступної команди:
rails g migration AddUserToUploads user:references
Який створить файл міграції як:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
Потім запустіть міграцію за допомогою rake db:migrate
. Ця міграція допоможе додати новий стовпець, названий user_id
до uploads
таблиці (посилаючись на id
стовпець у users
таблиці), PLUS також додасть індекс у новому стовпчику.
ОНОВЛЕННЯ [Для рейок 4.2]
Рейки не можна довіряти, щоб підтримувати референтну цілісність; Тут нам допомагають реляційні бази даних . Це означає, що ми можемо додавати обмеження для зовнішніх ключів на самому рівні бази даних і гарантувати, що база даних буде відхиляти будь-яку операцію, що порушує цю задану цілісність. Як прокоментував @infoget, Rails 4.2 поставляється з вбудованою підтримкою зовнішніх ключів (референтна цілісність) . Це не потрібно, але ви можете додати іноземний ключ (як це дуже корисно) до посилання, яке ми створили вище.
Щоб додати іноземний ключ до існуючої посилання , створіть нову міграцію, щоб додати зовнішній ключ:
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
Щоб створити абсолютно нову посилання з іноземним ключем (в Rails 4.2) , створіть міграцію, використовуючи таку команду:
rails g migration AddUserToUploads user:references
який створить файл міграції як:
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
Це додасть новий зовнішній ключ до user_id
стовпця uploads
таблиці. Ключ посилається на id
стовпчик у users
таблиці.
ПРИМІТКА. Це додатково до додавання посилання, тому вам все одно потрібно створити посилання спочатку, а потім закордонний ключ ( ви можете створити іноземний ключ у тій же міграції або окремому файлі міграції ). Active Record підтримує лише зовнішні клавіші для одного стовпця та в даний час mysql
, mysql2
і PostgreSQL
адаптери підтримуються. Не намагайтеся цього використовувати з іншими адаптерами, наприклад sqlite3
тощо. Для отримання довідки зверніться до Rails Guides: Foreign Keys .