在尝试保存大(ish)整数值时,获取指示编号的错误“超出ActiveRecord :: Type :: Integer且限制为4”的范围

我在我的Ruby应用程序中使用SQLite + ActiveRecord,这是我在尝试向整数字段写入一个大数字时得到的错误:

1428584647765超出ActiveRecord :: Type :: Integer的范围,限制为4

但根据SQLite文档:

该值是有符号整数,存储为1,2,3,4,6或8个字节,具体取决于值的大小。

8个字节是存储整数1428584647765的足够空间,那么为什么ActiveRecord会给我一个错误? 为什么它认为这是一个4字节的字段?

我遇到了同样的问题,上面的答案给了我一个如何修理我的线索。 我建议我的答案有点详细,以解决问题。

您可以通过在表列上设置限制来执行此操作。

哈克/步骤

  1. 运行迁移以更改表列。 例如

    rails generate migration change_integer_limit_in_your_table

    注意your_table中的your_table将是您的复数forms的表名

  2. 编辑生成的迁移,以便生成的迁移如下所示:

     class ChangeIntegerLimitInYourTable < ActiveRecord::Migration def change change_column :your_table, :your_column, :integer, limit: 8 end end 

    注意 :代码中的限制为8是存储大小,范围从-9223372036854775808到+9223372036854775807,并称为bigint即大范围整数。

  3. 运行rake db:migrate以迁移数据库。

  4. 通过运行rails server重新启动rails server ,您就可以运行了。

有关数字类型的更多信息,请参阅https://www.postgresql.org/docs/9.4/static/datatype-numeric.html

美好的一天。 默认情况下,使用len = 32字节创建columnt

要进行更改,您可以创建迁移,例如:

 t.integer :some_field, :limit => 8