ActiveRecord в Rails 3.0.3 превращает 8-е поле MySQL в BigDecimal. Как это исправить? - PullRequest
2 голосов
/ 11 июля 2011

У меня есть таблица членов, которая имеет 9 полей: id, email, ... и т. Д.

member_type - это восьмое поле

Восьмое поле всегда преобразуется в десятичное, нетНеважно, какое это имя или какой это тип.

Вот некоторые эксперименты, которые я провел:

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, который является восьмым полем.

Теперь, если я запрашиваю только некоторые поля, результат будет правильным:

irb(main):007:0> Member.all(:select=>"member_type,email")[0].attributes

=> {"email"=>"tanixxx@yahoo.com", "member_type"=>"GENERAL"}

Я думаю, что должна быть ошибка в ActiveRecord.


Вот еще один эксперимент.Я добавил «test_8th_field» в качестве восьмого поля и получил следующее:

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)>}

Восьмое поле - 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 ;

1 Ответ

3 голосов
/ 13 июля 2011

Я решил это.Оказывается, двоичная библиотека MySql не соответствует версии самой базы данных MySql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...