gpt4 book ai didi

ruby-on-rails - 在 Rails 4 中添加引用列迁移

转载 作者:行者123 更新时间:2023-12-03 04:01:06 25 4
gpt4 key购买 nike

一个用户有很多上传内容。我想在引用 useruploads 表中添加一列。迁移应该是什么样子?

这是我所拥有的。我不确定是否应该使用 (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 仅支持单列外键,目前仅支持 mysqlmysql2PostgreSQL 适配器。不要尝试使用其他适配器(例如 sqlite3 等)。请参阅 Rails Guides: Foreign Keys供您引用。

关于ruby-on-rails - 在 Rails 4 中添加引用列迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22815009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com