bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

ActiveRecord меняет тип поля?

Здравствуйте. У меня есть таблица Branch -> code {11}. Значение '0000000001'. ActiveRecord почему-то преобразует поле с символьного в числовое, а здесь лидирующие нули важны.
inst = Institution.joins( :branch ).select( 'branches.code' ).first
puts inst.code # 1 
puts inst.class # FixNum


Подскажите как решить такую проблему, спасибо.

Насколько я понял, это связано с тем что у меня в таблице Institutions есть поле code:integer. Вот видимо поэтому ActiveRecord берет его тип. Если к примеру поле переименовать и сделать
Institution.joins( :branch ).select( 'branches.code as code_branch' ).first


Тогда все нормально, но мне нужно именно code, что бы не отклонятся от стиля написания. Можно конечно еще пойти и написать менее эффективный запрос в плане производительности
Branch.joins( :institutions ).select( :code )
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
У тебя поле типа integer, а заносишь строковое значение?!
Фреймворк выполняет конверсию самостоятельно наподобие такого:
code = '0000000001' # строка с числовым значением
puts Integer(code).inspect

Для числовых значений ведущие нули не имеют значения, а потому их нет смысла отображать.
0001, 01, 00000000001, 1 - это одно и то же число.

Допустим, если нужно хранить штрих-код продукта, то нужно выставить строковый тип полю code.
Тогда в БД сохранится именно строка, а не сконвертированное в целое число значение.

Для работы же с битовыми значениями в целых числах используют нотацию
code = 0b0000000011 # (число 3, включены 0-й и 1-й биты)
puts code.inspect
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы