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: внешние ключи для вашей справки.