Rails 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
таблице), а также добавит индекс для нового столбца.
ОБНОВЛЕНИЕ [Для Rails 4.2]
Rails нельзя доверять для поддержания ссылочной целостности; Реляционные базы данных приходят нам на помощь здесь. Это означает, что мы можем добавить ограничения внешнего ключа на самом уровне базы данных и гарантировать, что база данных отклонит любую операцию, которая нарушает этот набор ссылочной целостности. Как прокомментировал @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: внешние ключи для вашей справки.