在尝试保存大(ish)整数值时,获取指示编号的错误“超出ActiveRecord :: Type :: Integer且限制为4”的范围
我在我的Ruby应用程序中使用SQLite + ActiveRecord,这是我在尝试向整数字段写入一个大数字时得到的错误:
1428584647765超出ActiveRecord :: Type :: Integer的范围,限制为4
但根据SQLite文档:
该值是有符号整数,存储为1,2,3,4,6或8个字节,具体取决于值的大小。
8个字节是存储整数1428584647765的足够空间,那么为什么ActiveRecord会给我一个错误? 为什么它认为这是一个4字节的字段?
我遇到了同样的问题,上面的答案给了我一个如何修理我的线索。 我建议我的答案有点详细,以解决问题。
您可以通过在表列上设置限制来执行此操作。
哈克/步骤
-
运行迁移以更改表列。 例如
rails generate migration change_integer_limit_in_your_table
注意 :
your_table
中的your_table
将是您的复数forms的表名 -
编辑生成的迁移,以便生成的迁移如下所示:
class ChangeIntegerLimitInYourTable < ActiveRecord::Migration def change change_column :your_table, :your_column, :integer, limit: 8 end end
注意 :代码中的限制为8是存储大小,范围从-9223372036854775808到+9223372036854775807,并称为
bigint
即大范围整数。 -
运行
rake db:migrate
以迁移数据库。 -
通过运行
rails server
重新启动rails server
,您就可以运行了。
有关数字类型的更多信息,请参阅https://www.postgresql.org/docs/9.4/static/datatype-numeric.html
美好的一天。 默认情况下,使用len = 32字节创建columnt
要进行更改,您可以创建迁移,例如:
t.integer :some_field, :limit => 8