0

私はこのようなものを持っています:

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"

x を BigDecimal、またはより具体的な DataMapper::Property::Decimal に変換する方法は? 検索できるように

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 文字を格納できないため

4

1 に答える 1

1

私は DataMapper のBinary型を試してみます:

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

もう 1 つの方法は、ダイジェストを 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
于 2013-08-22T11:13:26.400 に答える