2013-09-22 86 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組合的唯一標識符的十六進制。