2010-02-26 61 views
5

假設我有一個應用程序是一個地址簿。我想要一個專門用於「儀表板」的頁面。在這個頁面上,我希望有一個在應用程序本身發生的事件的運行列表。在Rails中創建儀表板

事件的例子可以是:

  1. 用戶添加的聯繫人。
  2. 用戶刪除聯繫人。
  3. 用戶更新聯繫人。

什麼是創建此類功能的最佳方法?本來我覺得我可以用現有數據做一些有創意的數據庫調用,但是我不能處理刪除數據的事件,比如刪除聯繫人時。

所以現在我想它必須是一個單獨的表格,只需將事件存儲起來即可。這是大多數網站如何完成這個?

我可以遍歷我的應用程序,每次執行CRUD操作時,我都可以在表格中創建一個新項目,詳細說明發生了什麼,但這看起來不太乾燥。

我想我的問題是 - 在現有的應用程序(如地址簿)中創建儀表板功能的最佳方式是什麼?

任何指導將不勝感激。

回答

6

最簡單的方法是除了數據庫中的「記錄器」表之外,用戶還可以使用Observers

Logger 
    id 
    model_name 
    model_id 
    message 

這種方式可以設置爲你想要記錄所有車型的觀察,並做這樣的事情:

after_delete(contact) 
    Logger.create({:model_name => contact.class.to_s, 
       :model_id => contact.id, 
       :message => "Contact was deleted at #{Time.now}"}) 
end 

現在你可以在你認爲合適的方式記錄任何事件。這種結構的另一個很好的補充是實現「邏輯刪除」,這意味着你從來沒有從表中刪除記錄,你簡單地給它一個標記,以便它不再出現在常規結果集中。有一個插件叫做acts_as_paranoid

如果您同時執行上述兩項操作,儀表板可以記錄所有重要操作,並且如果您需要查看發生了什麼或查看這些事件的數據,則它全部在系統中,並且可以通過控制檯(或控制器,如果你設置它們)。

1

您可以使用Observers來處理事件。

然後只需從這些觀察者存儲數據庫中所需信息的事件。

這是一個quick link爲您開始。

1

我在過去使用acts_as_audited創建了類似的功能。

這可以幫助您跟蹤對模型的更改,然後您可以向用戶展示這些更改。

正如您所建議的那樣,它基本上只是在單獨的表格中跟蹤事件。

2

你可能想看看時間軸傅:http://github.com/jamesgolick/timeline_fu

class Post < ActiveRecord::Base 
    belongs_to :author, :class_name => 'Person' 
    fires :new_post, :on => :create, 
       :actor => :author 
end 
0

用戶paper_trail插件,它是真棒!我們修改了它,它被用於我們所有審計系統的複雜發佈過程。