Вести журнал пользовательских событий в rails

В настоящее время я пытаюсь создать журнал для раздела администрирования моего приложения rails. Это позволит администратору увидеть, какие действия пользователь выполнил и когда. Например: «Пользователь добавил новый адрес», «Пользователь обновил свой почтовый индекс с X на Y».

Поскольку каждое действие потенциально может включать множество моделей, а не только пользователя, я создал модель журнала, в которой есть поля для всех остальных. система моделирует идентификаторы, сообщение и код журнала.

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

Меня беспокоит то, что, например, пользователь может (скажем) добавить назначение для своей учетной записи, оно регистрируется как

Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')

(где-то код 342 соответствует ' Пользователь создал новый адрес ', следовательно, в сообщении нет необходимости)

Очевидно, что при просмотре журнала я могу извлечь информацию о соответствующем пользователе и адресе из идентификаторов / сведений журнала, но если этот пользователь или адрес будут удалены, все это информация будет недоступна, и поэтому, просматривая журналы, запись будет в основном бесполезной.

Должен быть лучший способ или что-то уже существующее, чтобы помочь зарегистрировать системные события, подобные этому, и справиться с потенциальными удалениями.

В качестве альтернативы я мог бы сохранить всю запись в виде текстового сообщения, но было бы так плохо, и заполнить базу данных без обязательно?

Сообщите мне, если что-то из этого неясно, просто предполагалось, что действия / события приложения должны быть выполнены раньше!

Спасибо,

Пит

5
задан Pete Hamilton 29 August 2011 в 21:33
поделиться