Rails 4.x
当您已经有 users
and 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指南:外键》。