用户上传次数过多。我想在上传表中添加一个引用用户的列。迁移应该是什么样的?

这是我有的。我不确定我是否应该使用(1):user_id,:int或(2):user,:引用。我甚至不确定(2)是否有效。我只是想按"铁轨"的方式来。

class AddUserToUploads < ActiveRecord::Migration
  def change
    add_column :uploads, :user_id, :integer
  end
end

除了Rails 3之外的相关问题。Rails 3迁移:添加参考列?


当前回答

class MigrationName < ActiveRecord::Migration[7.0]
  disable_ddl_transaction!
  
  def change
    add_reference :uploads, :user, index: {algorithm: :concurrently}
  end
end

其他回答

class MigrationName < ActiveRecord::Migration[7.0]
  disable_ddl_transaction!
  
  def change
    add_reference :uploads, :user, index: {algorithm: :concurrently}
  end
end

做同样事情的另一种语法是:

rails g migration AddUserToUpload user:belongs_to

Rails 5

您仍然可以使用此命令来创建迁移:

rails g migration AddUserToUploads user:references

迁移看起来与之前有点不同,但仍然有效:

class AddUserToUploads < ActiveRecord::Migration[5.0]
  def change
    add_reference :uploads, :user, foreign_key: true
  end
end

注意,它是:user,而不是:user_id

创建一个迁移文件

rails generate migration add_references_to_uploads user:references

默认外键名称

这将在uploads表中创建一个user_id列作为外键

class AddReferencesToUploads < ActiveRecord::Migration[5.2]
  def change
    add_reference :uploads, :user, foreign_key: true
  end
end

用户模式:

class User < ApplicationRecord
  has_many :uploads
end

上传模型:

class Upload < ApplicationRecord
  belongs_to :user
end

自定义外键名称:

add_reference :uploads, :author, references: :user, foreign_key: true

这将在上传表中创建一个author_id列作为外键。

用户模式:

class User < ApplicationRecord
  has_many :uploads, foreign_key: 'author_id'
end

上传模型:

class Upload < ApplicationRecord
  belongs_to :user
end

只是为了记录下是否有人有同样的问题……

在我的情况下,我一直在使用:uuid字段,上面的答案并不适用于我的情况,因为rails 5正在使用:bigint而不是:uuid创建一个列:

add_reference :uploads, :user, index: true, type: :uuid

参考:Active Record Postgresql UUID