我有一个成员表,它有 9 个字段:id、email...等等。
member_type为第8个字段
第 8 个字段总是转换为十进制,无论它是什么名称或它是什么类型。
这是我做过的一些实验:
irb(main):010:0> Member.all()[0].attributes
=> {"created_date"=>nil, "email"=>"tanixxx@yahoo.com", "id"=>1, "is_admin"=>0, "
member_type"=>#<BigDecimal:4f87ce0,'0.0',4(8)>, "name"=>"tanin", "password"=>"3c
f622832f10a313cb74a59e6032f115", "profile_picture_path"=>"aaaaa", "status"=>"APP
ROVED"}
请注意:member_type,这是第 8 个字段。
现在如果我只查询一些字段,结果是正确的:
irb(main):007:0> Member.all(:select=>"member_type,email")[0].attributes
=> {"email"=>"tanixxx@yahoo.com", "member_type"=>"GENERAL"}
我想ActiveRecord一定有bug。
这里还有一些实验。我添加了“test_8th_field”作为第 8 个字段,我得到了这个:
irb(main):016:0> Member.all[0].attributes
=> {"created_date"=>nil, "email"=>"tanixxx@yahoo.com", "id"=>1, "is_admin"=>0, "
member_type"=>"GENERAL", "name"=>"tanin", "password"=>"3cf622832f10a313cb74a59e6
032f115", "profile_picture_path"=>"aaaaa", "status"=>"APPROVED", "test_8th_field
"=>#<BigDecimal:30c87f0,'0.0',4(8)>}
第 8 个字段是 BigDecimal(尽管它是 MySQL 中的文本字段)。但是这次 member_type 字段出奇地正确。
我不知道数字8有什么问题......
请帮帮我。
这是我的模式转储,包括 test_8th_field:
CREATE TABLE IF NOT EXISTS `members` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`profile_picture_path` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`status` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`is_admin` int(11) NOT NULL,
`test_8th_field` text COLLATE utf8_unicode_ci NOT NULL,
`member_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'GENERAL',
`created_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
最佳答案
我已经解决了。事实证明,MySql 二进制库与 MySql 数据库本身的版本不匹配。
关于mysql - Rails 3.0.3 中的 ActiveRecord 将 MySQL 的第 8 个字段变成了 BigDecimal。如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6646507/