В настоящее время я пытаюсь создать журнал для раздела администрирования моего приложения rails. Это позволит администратору видеть, какие действия выполнил пользователь и когда. E.g "Пользователь добавил новый адрес", "Пользователь обновил свой почтовый индекс с 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 соответствует «Пользователь создал новый адрес», следовательно, сообщение не нужно)
Очевидно, что в представлении журнала я могу извлечь информацию о соответствующем пользователе и адресе из идентификаторов / подробностей журнала, но если этот пользователь или адрес будут удалены, вся эта информация будет недоступна, и поэтому, просматривая журналы, запись будет в основном бесполезной.
Должен существовать более эффективный способ или что-то подобное, чтобы помочь регистрировать подобные системные события и справляться с потенциальными удалениями.
В качестве альтернативы, я мог бы сохранить всю запись в виде текстового сообщения, но разве это не было бы очень плохо, и без необходимости заполнять базу данных?
Дайте мне знать, если что-то из этого неясно, просто подумайте, что регистрация действий / событий приложения должна была быть сделана раньше!
Спасибо
Пит