假设我有一个地址簿的应用程序。我想要一个专门用于“仪表板”的页面。在这个页面上,我想有一个在应用程序本身内发生的事件的运行列表。
事件示例可能是:
创建此类功能的最佳方法是什么?最初我觉得我可以使用现有数据进行一些创意数据库调用,但我无法处理删除数据的事件,例如删除联系人时。
所以现在我认为它必须是一个单独的表,它只是在事件发生时存储它们。这是大多数网站实现这一目标的吗?
我可以在整个应用程序中运行,每次执行CRUD操作时,我都可以在表格中创建一个新项目,详细说明发生了什么,但这看起来不是很干。
我认为我的问题是 - 在现有应用程序(例如地址簿)中创建仪表板功能的最佳方法是什么?
非常感谢任何指导。
答案 0 :(得分:6)
除了数据库中的“记录器”表之外,最简单的方法是使用Observers。
Logger
id
model_name
model_id
message
通过这种方式,您可以为要记录的所有模型设置Observer,并执行以下操作:
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 :(得分:2)
您可以查看Timeline Fu:http://github.com/jamesgolick/timeline_fu:
class Post < ActiveRecord::Base
belongs_to :author, :class_name => 'Person'
fires :new_post, :on => :create,
:actor => :author
end
答案 2 :(得分:1)
答案 3 :(得分:1)
答案 4 :(得分:0)
用户paper_trail插件,太棒了!我们对它进行了修改,它用于我们所有的复杂发布过程的审计系统。