Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 5.1.0如何升级_Ruby On Rails_Migration_Bigint_Ruby On Rails 5.1 - Fatal编程技术网

Ruby on rails Rails 5.1.0如何升级

Ruby on rails Rails 5.1.0如何升级,ruby-on-rails,migration,bigint,ruby-on-rails-5.1,Ruby On Rails,Migration,Bigint,Ruby On Rails 5.1,Rails 5.1.0引入了bigint主键和外键 所有新表都将具有bigint pk,并且创建到旧表的引用迁移将不起作用,因为旧pk是正常的int 使用change\u column\u,:id,:bigint只有外键指向它的错误,更不用说查找所有表以及哪个表有需要修改的键的所有手工劳动了 如何将生产数据库和所有表迁移到使用bigint pk和fk 当然,由于它是生产性的,所以rails db:drop rails db:setup不是一个选项。我也面临同样的问题。临时移除fk应该有效。目标是

Rails 5.1.0引入了bigint主键和外键

所有新表都将具有bigint pk,并且创建到旧表的引用迁移将不起作用,因为旧pk是正常的int

使用
change\u column\u,:id,:bigint
只有外键指向它的错误,更不用说查找所有表以及哪个表有需要修改的键的所有手工劳动了

如何将生产数据库和所有表迁移到使用bigint pk和fk


当然,由于它是生产性的,所以rails db:drop rails db:setup不是一个选项。

我也面临同样的问题。临时移除fk应该有效。目标是将所有主键从int更改为bigint

class ChangeForeignKeysToBigInt < ActiveRecord::Migration[5.1]
  def change

    remove_foreign_key "event_users", "events"

    change_column :event_users, :event_id, :bigint
    change_column :events, :id, :bigint

    add_foreign_key "event_users", "events"

  end
end
class ChangeForeignKeysBigint
您必须对所有表和外键列执行此操作
也许以同样的方式处理索引,我没有在CHANGELOG中测试,我发现只有主键变为BIGINT。你能找到一个关于外键行为更改的链接吗?我试图创建一个引用旧表的表,但失败了,因为旧表有一个小的int pk。将迁移从[5.1]更改为[5.0]使其工作正常,但没有什么大问题。所以它没有说改变,但它影响了fk的。谢谢,是的,这可能会起作用,但我有很多表格,没有办法一次完成所有的工作吗?或者禁用bigint情况?您可以使用所有主键自动执行此操作,更大的问题是指向主键的外键列,可以自动执行此操作,但难度更大。只要在所有表上写一个循环,更改主键,同时更改内部带有“\u id”且数据类型为integer的列,这应该可以工作。我有很多表,我可能可以使用我出色的文本技能获得所有内容,但我不想做太多的手动升级工作。我叫我lazy,但我觉得rails应该引入一种策略来实现这一点。运行时,它会将所有:id列更改为bigint,但会丢失它们应该是主键的信息。相反,create_表定义的默认值为:nil,且与:id列的自动递增无关。还有其他人遇到过这个问题吗?