Если вы собираетесь хранить свой SHA2 в двоичном столбце, то, возможно, вы просто захотите использовать digest
метод , чтобы получить необработанные байты SHA2:
big_num = Digest::SHA2.new.update("some string to be checksum'd").digest
Ваш SHA2 является 256-битным значением (32 байта), и он не помещается в Fixnum (который использует менее 32 или 64 бит из-за внутренних битов учета), поэтому вы получаете Bignum при вызове .hexdigest.to_i(16)
.Двоичные столбцы - это на самом деле просто последовательности байтов (то есть двоичные строки ), и часть механизма кодирования, вероятно, использует gsub
, чтобы получить байты в формате, который ожидает база данных.Вы назначаете Bignum для чего-то, что ожидает увидеть строку, и это не работает так хорошо.
Вы также можете использовать простой строковый столбец (с :limit=> 64
) для хранения значения .hexdigest
вместо 32-байтового двоичного столбца.