一个用户有很多上传内容。我想在引用 user
的 uploads
表中添加一列。迁移应该是什么样子?
这是我所拥有的。我不确定是否应该使用 (1) :user_id, :int
或 (2) :user, :references
。我什至不确定(2)是否有效。只是试图以“rails”方式做到这一点。
class AddUserToUploads < ActiveRecord::Migration
def change
add_column :uploads, :user_id, :integer
end
end
除 Rails 3 之外的相关问题。Rails 3 migrations: Adding reference column?
最佳答案
Rails 4.x
当您已有用户
和上传
表并希望在它们之间添加新关系时。
您需要做的就是:只需使用以下命令生成迁移:
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 附带了对外键(引用完整性)的 native 支持。这不是必需的,但您可能希望将外键(因为它非常有用)添加到我们上面创建的引用中。
要将外键添加到现有引用,请创建一个新的迁移来添加外键:
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供您引用。
关于ruby-on-rails - 在 Rails 4 中添加引用列迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22815009/