【发布时间】:2017-07-04 20:41:01
【问题描述】:
我已在 Padrino 应用程序上升级到最新的 Ruby,并且在创建新对象时出现活动记录错误。它将一个数字(ISBN)验证为 4 个字节。错误是:
9781407005416 is out of range for ActiveRecord::Type::Integer with limit 4
如何告诉 Ruby 活动记录类使用 8 字节限制?
我不是在谈论运行迁移,表已经是bigint(20)。
我认为以下方法会起作用:
class Book < ActiveRecord::Base
attribute :isbn, :integer, :limit => 8
end
然后,我在 ISBN 字段的 find_by 和 as_json 上收到错误:
#<NoMethodError: undefined method 'type_cast_for_database' for :integer:Symbol
我将“isbn”方法变成了一个新的实例变量,而不是更改活动记录适配器创建的属性列。
我知道column has a limit,但不确定如何访问列的类型来更新它。
类型设置的解决方案是有一种方法可以跳过活动记录ensure_in_range中现在发生的验证。
有没有办法从我的应用程序中更改内置的 DEFAULT_LIMIT = 4 或 class Integer < Value?这与following changes in Ruby 有关,但我无权更改Padrino 源。
【问题讨论】:
-
你用的是什么数据库?
-
MySQL,ruby 适配器未捕获大整数并相应调整限制。
标签: ruby rails-activerecord padrino