2016-12-01 159 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