2016-12-01 77 views
1

在我们的Rails应用程序中,用户(或我们代表他)加载一些数据,甚至使用crud手动插入它。如何为用户创建的所有记录创建散列?

完成此步骤后,用户必须验证所有配置(数据)并“接受并同意”它们都是正确的。

在给定的一天,应用程序将根据配置执行一些任务。

今天,我们已经拥有了“冻结”标志,在这里我们可以防止数据的变化,因此用户不能乱的事情了......

但是,我们还要做一些像哈希数据,并说“像你的配置被冻结,散列是34FE00 ...”。

这会让用户确信系统正在运行他所批准的配置。

我们该怎么做?有7或8个表格。创建的记录总数约为2k或3k。

如何散列数据以检测批准后的更改?你会怎么做?

我想在每个表中做一个find_by_user,循环所有记录并使用一些字段(或全部)来构建一个字符串,并在当前循环的末尾对其进行散列。

循环所有表后,我会有8个哈希字符串,并将它们连接起来并将它们散列在最终的哈希中。

它看起来像什么?有任何想法吗?

+0

我没有得到它 - 你希望用户通过3K DB条目读? –

+3

我会使用审计。使用类似[paper_trail](https://github.com/airblade/paper_trail)的记录来保存更改,并让用户反转回滚不良内容。 – max

+0

否Andrey,用户不会读取所有行。一些数据是由我们生成的。只有一小部分数据由用户提供...想象一下,用户应该为我们提供产品目录,类别列表等......在我们导入这些数据之后,他必须验证并且我们将冻结配置。 hashA = TableA.findByUser.all.map {| e | e.field_a + e.field_b} .to._s.to_md5 hashB = TableB.findByUser.all.map {| e | e.field_a + e.field_b} .to._s.to_md5 ... final_hash =(hashA + hashB + hashN).to_md5 –

回答

0

这是一个可能的实现。只要定义object为所有的东西数组你想哈希:

require 'digest/md5' 

def validation_hash(object, len = 16) 
    Digest::MD5.hexdigest(object.to_json)[0,len] 
end 

puts validation_hash([Actor.first,Movie.first(5)]) 
# => 94eba93c0a8e92f8 
# After changing a single character in the first Actors's biography : 
# => 35f342d915d6be4e