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

标签 ruby-on-rails ruby-on-rails-4 foreign-keys rails-activerecord rails-migrations

一个用户有很多上传内容。我想在引用 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/

相关文章:

ruby-on-rails - 如何查看数据库中编码(如 base64)的 pdf 文件?

ruby-on-rails - 升级到 devise 3.1 => 获取重置密码 token 无效

postgresql - jsonb 和主/外键 : which performs better in PostgreSQL?

SQL Server 读取带有外键的列时出现问题

ruby-on-rails - Oauth 2 "redirect_uri_mismatch: { "错误”: "redirect_uri_mismatch" }"in rails

ruby-on-rails - 语法错误,意外 ',' ,在将类分配给 erb 时期望 tCOLON2 或 '[' 或 '.'

css - rails View link_to

ruby-on-rails - 在 ruby​​ on rails 中使用 slim 而不是 erb 动态传递 id

ruby-on-rails-4 - 在 Rails 4 中从 javascript 访问生产中的图像

mysql - 从现有字段 MySQL 创建子表