在rails中记录用户事件

Pet*_*ton 5 database logging activerecord action ruby-on-rails

我目前正在尝试为我的rails应用程序的管理部分实现日志.这将允许管理员查看用户执行了什么操作以及何时执行.例如'用户添加了新地址','用户将他们的邮政编码从X更新为Y'.

由于每个动作都可能涉及许多模型,而不仅仅是用户,我创建了一个日志模型,其中包含所有其他系统模型ID,消息和日志代码的字段.

class CreateLogs < ActiveRecord::Migration
  def self.up
    create_table :logs do |t|
      t.integer :user_id
      t.integer :marker_id
      t.integer :administrator_id
      t.integer :group_id
      t.integer :assignment_id
      t.integer :submission_id
      t.integer :code
      t.text :message

      t.timestamps
    end
  end

  def self.down
    drop_table :logs
  end
end
Run Code Online (Sandbox Code Playgroud)

我担心的是,例如,用户可以(让我们说)在他们的帐户中添加一个作业,它会被记录为

Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')
Run Code Online (Sandbox Code Playgroud)

(某处代码342对应于'用户创建了一个新地址',因此不需要消息)

显然,在日志视图中,我可以从日志ID /详细信息中提取相关用户和地址信息,但是如果要删除此用户或地址,则所有信息都将不可用,因此回顾日志,条目将是基本没用.

必须有更好的方法或某些东西来帮助记录这样的系统事件并应对潜在的删除.

或者,我可以将整个条目存储为文本消息,但这不是非常糟糕并且不必要地填满数据库吗?

如果其中任何一个不清楚,请告诉我,只需要记录日志应用程序操作/事件之前已经完成!

谢谢,

皮特

eug*_*gen 3

看看ActiveRecord Versioning上列出的宝石,它可能就是您所需要的。