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 表(引用 users 表中的 id 列),此外它还将在新列上添加索引。
更新 [适用于 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
这将为uploads 表的user_id 列添加一个新的外键。键引用users 表中的id 列。
注意:这是除了添加引用之外,因此您仍然需要先创建引用,然后创建外键(您可以选择创建外键键入相同的迁移或单独的迁移文件)。 Active Record 仅支持单列外键,目前仅支持 mysql、mysql2 和 PostgreSQL 适配器。不要尝试与sqlite3 等其他适配器一起使用。请参阅Rails Guides: Foreign Keys 以供参考。