Ruby on rails Rails 4.1.15 PostgreSQL,更新为数字(9)字段给出;没有整数类型的字节大小为9“;

Ruby on rails Rails 4.1.15 PostgreSQL,更新为数字(9)字段给出;没有整数类型的字节大小为9“;,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,这快把我们逼疯了 我们最近通过Rails迁移向表中添加了一个数字(9,0)字段(称之为“foo”)。现在,尝试更新此字段将提供: irb(main):001:0> e = MyModel.first irb(main):002:0> e.foo = 1 irb(main):003:0> e.save! (0.4ms) BEGIN (0.4ms) ROLLBACK ActiveRecord::ActiveRecordError: No integer type has byt

这快把我们逼疯了

我们最近通过Rails迁移向表中添加了一个数字(9,0)字段(称之为“foo”)。现在,尝试更新此字段将提供:

irb(main):001:0> e = MyModel.first
irb(main):002:0> e.foo = 1
irb(main):003:0> e.save!
(0.4ms)  BEGIN
(0.4ms)  ROLLBACK
ActiveRecord::ActiveRecordError: No integer type has byte size 9. Use a numeric with precision 0 instead.
它显然决定类型为整数,并将精度值作为整数的长度(字节大小)

我们将模型简化为基本类。。。结束而不让它消失

第8.4页和第9.1页的错误相同

我们可以将相同的字段添加到另一个表中,它在那里工作,但在这个表中不工作

谢谢你的任何想法

更新:

有趣的是,可以更新数字(9)字段的表缺少lock_version字段。将lock_版本添加到该表中启用了乐观锁定,问题突然出现在那里。在最初失败的表上关闭乐观锁定也可以工作。还不知道为什么。

你做过类似的事情吗?是的,我们尝试将其设置为数字,然后它抱怨0不是整数类型(IIRC)的有效长度。感谢您的回复。您是如何具体添加
数值(9,0)
列的?
\d table\u name
从内部
psql
说明了什么?显然,活动记录对这种情况没有预见性。这是一个疯狂的想法:如果提供了fixnun,则使用保存前回调保存为浮点或精度为_的数字(不确定其工作原理)。该字段是通过类型为numeric且精度为9的add(添加)列迁移创建的。它的类型与数据将来自的另一个数据库相匹配。检查PGAdmin中的表和字段时,工作情况和非工作情况之间没有可检测的差异,类型显示如预期。您是否执行了类似操作?是的,我们尝试将其设置为数字,然后它抱怨0不是整数类型(IIRC)的有效长度。感谢您的回复。您是如何具体添加
数值(9,0)
列的?
\d table\u name
从内部
psql
说明了什么?显然,活动记录对这种情况没有预见性。这是一个疯狂的想法:如果提供了fixnun,则使用保存前回调保存为浮点或精度为_的数字(不确定其工作原理)。该字段是通过类型为numeric且精度为9的add(添加)列迁移创建的。它的类型与数据将来自的另一个数据库相匹配。检查PGAdmin中的表和字段时,工作和非工作案例之间没有可检测的差异,类型显示与预期一致。