我有一个包含多个属性MyModel(attr_1:integer, attr_2:string, attr_3:integer, attr_4: float, …etc, uid: integer)
我需要为uid
和attr_1
值的每个唯一组合填充每个记录的attr_2
字段,并为其添加唯一值
然后我可以使用这个字段来查找基于这个组合的所有“半相似”记录与琐碎的选择
第一个想法是:
"#{attr_1}_#{attr_2}".hash #=>produces long (unique?) integer
但我不相信它是否能提供我需要的价值
是吗?或者你能提出更好的解决方案吗?答案 0 :(得分:0)
您可以尝试MD5哈希算法
require 'digest/md5'
Digest::MD5.hexdigest("#{attr_1}_#{attr_2}")
将为唯一的attr1_attr2组合创建唯一的十六进制标识符。
答案 1 :(得分:0)
如果您可以将 uid类型更改为String ,则可以使用以下方法。另外,您必须实现类似公钥加密。
的内容如果您需要使用唯一键找到半相似记录,则必须有两个可分开的部分。
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-%'"
for attr2x
attr2xhash = Digest::MD5.new << 'attr2x'
attr2xhash = attr2xhash[0..6]
"like '%-attr2x'"
注意:对于非相等属性,有可能获得2个相等的字符串。您可以通过增加字符串大小来最小化它。 (这里6)