对于ActiveModel :: Type :: Integer,Number超出范围,限制为4

时间:2016-12-08 00:44:45

标签: ruby-on-rails

我在chat_id列中创建了限制为8的迁移:

class CreateChat < ActiveRecord::Migration[5.0]
  def change
    create_table :bots do |t|
      t.integer :user_chat_id, null: false, limit: 8, unique: true
      ...
      t.timestamps
    end
  end
end

完全创建了迁移,我可以在其中插入数据。 但如果我这样做:

class Chat < ApplicationRecord
  self.primary_key = 'user_chat_id'
end

发生以下错误,5187762395178250超出了限制为4的ActiveModel :: Type :: Integer的范围。

我研究并查看了文档,但我没有找到任何相关内容。

2 个答案:

答案 0 :(得分:1)

我们也处理此错误,这是我们的情况:

  1. 将数据库类型从int更改为bigint(MySQL表,列id
  2. id列超过最大int值(21亿-无符号整数)时,我们的应用在某些API中返回了此错误

重新启动puma服务器已解决它。 只是这个简单的命令,我们花了大约4个小时。 :((

如果您在网络服务器上使用UnicornPassenger 5或其他任何服务器,请尝试重新启动,我认为它可以解决您的问题。

希望这会有所帮助,谢谢。

答案 1 :(得分:0)

看起来你需要禁止创建主键,默认情况下是主键。因此,回滚迁移并修改迁移文件以首先包含此行:

create_table :bots, id: false do |t|
  t.integer :user_chat_id, null: false, limit: 8, unique: true
  ...
  t.timestamps
end ...

您应用于user_chat_id的选项将使其成为主键。