在Rails中创建仪表板

时间:2010-02-26 02:53:39

标签: ruby-on-rails

假设我有一个地址簿的应用程序。我想要一个专门用于“仪表板”的页面。在这个页面上,我想有一个在应用程序本身内发生的事件的运行列表。

事件示例可能是:

  1. 用户添加联系人。
  2. 用户删除联系人。
  3. 用户更新联系人。
  4. 创建此类功能的最佳方法是什么?最初我觉得我可以使用现有数据进行一些创意数据库调用,但我无法处理删除数据的事件,例如删除联系人时。

    所以现在我认为它必须是一个单独的表,它只是在事件发生时存储它们。这是大多数网站实现这一目标的吗?

    我可以在整个应用程序中运行,每次执行CRUD操作时,我都可以在表格中创建一个新项目,详细说明发生了什么,但这看起来不是很干。

    我认为我的问题是 - 在现有应用程序(例如地址簿)中创建仪表板功能的最佳方法是什么?

    非常感谢任何指导。

5 个答案:

答案 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)

您可以使用Observers来处理事件。

然后只使用这些观察者在数据库中所需的信息存储事件。

这是一个quick link,可以帮助您入门。

答案 3 :(得分:1)

我过去使用acts_as_audited创建了类似的功能。

这有助于您跟踪模型的更改,然后您可以向用户显示这些更改。

它基本上只是按照您的建议跟踪单独表格中的事件。

答案 4 :(得分:0)

用户paper_trail插件,太棒了!我们对它进行了修改,它用于我们所有的复杂发布过程的审计系统。