2013-08-22 2 views
0

у меня есть что-то вроде этого:Как конвертировать OpenSSL Digest привести к BigDecimal/DataMapper :: Недвижимость :: Decimal

x = OpenSSL::Digest::SHA512.new('test').digest 
# "\xEE&\xB0\xDDJ\xF7\xE7I\xAA\x1A\x8E\xE3\xC1\n\xE9\x92?a\x89\x80w.G?\x88\x19\xA5\xD4\x94\x0E\r\xB2z\xC1\x85\xF8\xA0\xE1\xD5\xF8O\x88\xBC\x88\x7F\xD6{\x1472\xC3\x04\xCC_\xA9\xAD\x8EoW\xF5\x00(\xA8\xFF" 

как преобразовать х в BigDecimal, или более конкретно DataMapper :: Недвижимость :: -десятичная? поэтому я могу найти его

class MyRecord 
    include DataMapper::Resource 
    property :id, Serial 
    property :amount, Decimal, precision: 156 
end 

DataMapper.finalize 
DataMapper.auto_migrate! 

x = OpenSSL::Digest::SHA512.new('test').digest 
x = # convert to BigDecimal or DataMapper::Property::Decimal 

y = MyRecord.new 
y.amount = x 
y.save 

z = MyRecord.first(amount: x) 

или, если нет ярлыка, какой правильный тип хранить эти значения? поскольку строка PostgreSQL не может хранить NULL символов

ответ

1

Я хотел бы попробовать DataMapper в Binary Тип:

class MyRecord 
    include DataMapper::Resource 
    property :id, Serial 
    property :amount, Binary, length: 64 
end 

Другой подход заключается в base64 кодирования дайджеста и сохранить его в виде строки:

class MyRecord 
    include DataMapper::Resource 
    property :id, Serial 
    property :amount, String, length: 88 
end 

, а затем :

require 'base64' 

x = OpenSSL::Digest::SHA512.new('test').digest 
x = Base64.strict_encode64(x) 

y = MyRecord.new 
y.amount = x 
y.save 
+1

изменить: 'encode64' добавляет новые строки, вместо этого используйте' strict_encode64'. –

+0

К сожалению, 'Binary, length: 64' имеет ошибку на dm-postgres-adapter: https://github.com/datamapper/dm-postgres-adapter/issues/7 – Kokizzu

+0

Я буду использовать строку, затем .. – Kokizzu

Смежные вопросы