我编写了一个使用旧版 MySQL 数据库的 Rails 应用程序。一个表包含此字段
CREATE TABLE `articles` (
`active` tinyint(3) unsigned NOT NULL DEFAULT '0',
);
我已经修复了架构
t.boolean "active", :default => false
但是 rails 不会将该字段识别为布尔值
[1] pry(main)> Article.new.active.class
=> Fixnum
这将在验证上产生问题,因为我的班级中有这个验证器
class Article < ActiveRecord::Base
validates_inclusion_of :active, :in => [true, false]
end
当我为该字段分配布尔值时,它们将转换为 FixNum 并且验证失败并显示消息"1 is not included in the list"
如果我生成一个具有相同模型的新应用程序,则生成的 sql 代码是
CREATE TABLE `posts` (
`active` tinyint(1) DEFAULT NULL,
)
一切正常:
[1] pry(main)> Article.new.active.class
=> FalseClass
有没有办法让我的遗留列被识别为布尔值(可能不运行迁移)?