2013-09-22 57 views
0

我有几个属性模型MyModel(attr_1:integer, attr_2:string, attr_3:integer, attr_4: float, …etc, uid: integer)唯一记录标识符值

我需要填充每个记录的uid领域具有独特价值的attr_1attr_2

每一个独特的组合,然后我可以使用此字段来查找基于琐碎的选择

首先知道这个组合的所有“半类似”记载为:

"#{attr_1}_#{attr_2}".hash #=>produces long (unique?) integer 

但我不确定它是否给出我需要的价值

是吗?或者你能提出一个更好的解决方案?

回答

0

如果您可以将uid类型更改为字符串,则可以使用以下方法。其他方面,你将不得不实施类似公钥加密。

如果您需要使用唯一键找到半相似记录,则必须有两个可分离的部分。

hash1 = Digest::MD5.new << 'attr1' 
hash2 = Digest::MD5.new << 'attr2' 

然后,你可以保存的UID,

hash1[0..6] + "-" + hash2[0..6] 

这将创建13人物造型的字符串(6 + “ - ” + 6)

然后你就可以在搜索中使用它。

例如:如果你想attr1x在发现用它来搜索半同类者,

attr1xhash = Digest::MD5.new << 'attr1x' 
attr1xhash = attr1xhash[0..6] 
"like 'attr1x-%'" 

为attr2x

attr2xhash = Digest::MD5.new << 'attr2x' 
attr2xhash = attr2xhash[0..6] 
"like '%-attr2x'" 

注:没有获得2等的可能性不相等属性的字符串。您可以通过增加字符串大小来最小化它。 (这里6)

0

你可以试试MD5哈希算法

require 'digest/md5' 
Digest::MD5.hexdigest("#{attr_1}_#{attr_2}") 

将创造独特attr1_attr2组合的唯一标识符的十六进制。