我有一个问题需要我将现有的现场制作(我在本地开发框中复制了架构,别担心)表列类型从枚举转换为字符串。
背景:
基本上,以前的开发人员让我的代码库完全混乱:迁移版本非常过时,显然他在开发的某个时间点之后从未使用过它,现在我的任务是将 Rails 1.2.6 应用程序迁移到2.3.5。
我无法让测试在 2.3.5 上正常运行,因为我的表列具有 ENUM 列类型,并且它们在我的 schema.rb 上转换为:string
,:limit => 0
这会在执行 rake 时产生无效默认值的问题db:test:prepare
,例如的:
Mysql::Error: Invalid default value for 'own_vehicle': CREATE TABLE `lifestyles` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `member_id` int(11) DEFAULT 0 NOT NULL, `own_vehicle` varchar(0) DEFAULT 'Y' NOT NULL, `hobbies` text, `sports` text, `AStar_activities` text, `how_know_IRC` varchar(100), `IRC_referral` varchar(200), `IRC_others` varchar(100), `IRC_rdrive` varchar(30)) ENGINE=InnoDB
我正在考虑编写一个迁移任务,查看所有数据库表中的枚举列并将其替换为 VARCHAR,我想知道这是否是解决此问题的正确方法。或者更好的是,如果有一种方法可以解决这个问题而无需修改数据库,那就更好了!
我也不确定如何编写它,以便它遍历我的数据库表并将所有 ENUM 替换colum_types
为 VARCHAR。
参考