ruby-on-rails - view教程 - ruby论坛




在Rails 4中添加参考列迁移 (4)

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

这是我的。 我不确定是否应该使用(1) :user_id, :int或(2) :user, :references 。 我甚至不确定(2)是否有效。 只是试图做到这一点“铁轨”的方式。

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

Rails 3迁移:添加引用列?


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 4.x

当你已经有 usersuploads表格并希望在它们之间添加新的关系时

您需要做的只是:使用以下命令生成迁移:

rails g migration AddUserToUploads user:references

这将创建一个迁移文件为:

class AddUserToUploads < ActiveRecord::Migration
  def change
    add_reference :uploads, :user, index: true
  end
end

然后,使用rake db:migrate运行rake db:migrate 。 此迁移将负责添加一个名为user_id的新列以上uploads表(引用users表中的id列),PLUS还会在新列上添加一个索引。

更新[适用于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只支持单列外键,目前只支持mysqlmysql2PostgreSQL适配器。 不要尝试使用其他适配器,如sqlite3等。请参阅Rails指南:外键以供参考。


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

rails g migration AddUserToUpload user:belongs_to

如果您喜欢使用down方法的另一种替代方法,请尝试以下操作:

  def up
    change_table :uploads do |t|
      t.references :user, index: true
    end
  end

  def down
    change_table :uploads do |t|
      t.remove_references :user, index: true
    end
  end




rails-migrations