Tôi hiện đang cố gắng triển khai nhật ký cho phần quản trị của ứng dụng đường ray của tôi. Điều này sẽ cho phép quản trị viên xem những hành động mà người dùng đã thực hiện và khi nào. Ví dụ: 'Người dùng đã thêm địa chỉ mới', 'Người dùng đã cập nhật mã bưu điện của họ từ X thành Y'.Lưu nhật ký sự kiện của người dùng trong đường ray
Vì mỗi hành động có thể liên quan đến nhiều mô hình, không chỉ người dùng, tôi đã tạo một mô hình nhật ký có các trường cho tất cả các id mô hình hệ thống khác, thông báo và mã nhật ký.
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
mối quan tâm của tôi là ví dụ, người dùng có thể (giả sử) thêm một nhiệm vụ vào tài khoản của họ, nó được ghi lại như
Log.create(:user_id => current_user.id, :assignment_id => the_assignment.id, :code => 342, :message => '')
(Một nơi nào đó mã 342 tương ứng với 'người dùng tạo một địa chỉ mới ', do đó không cần thông báo)
Rõ ràng trong chế độ xem nhật ký, tôi có thể lấy thông tin người dùng và địa chỉ liên quan từ id nhật ký/chi tiết nhưng nếu người dùng hoặc địa chỉ này bị xóa, tất cả thông tin đó sẽ không có sẵn và vì vậy nhìn lại các bản ghi, mục nhập sẽ là basicall y vô dụng.
Phải có cách tốt hơn hoặc một thứ gì đó đã tồn tại để giúp các sự kiện hệ thống nhật ký như thế này và đối phó với việc xóa tiềm năng.
Hoặc tôi có thể lưu trữ toàn bộ mục nhập dưới dạng tin nhắn văn bản nhưng điều đó không thực sự tồi và điền vào cơ sở dữ liệu không cần thiết?
Hãy cho tôi biết nếu bất kỳ điều nào không rõ ràng, chỉ cần tìm các hành động/sự kiện đăng nhập đã được thực hiện trước đó!
Cảm ơn,
Pete
Điều này có vẻ đầy hứa hẹn, đặc biệt giống như đường viền giấy, nhưng nó chỉ có thể lưu một phiên bản/nhật ký duy nhất khi mô hình được thay đổi đúng không? Điều gì xảy ra nếu tôi muốn chỉ định từng thay đổi theo cách thủ công? Hoặc nếu có một hành động được thực hiện mà không nhất thiết phải thay đổi một mô hình nhưng làm một cái gì đó khác như gửi một email? –
Có, phiên bản/kiểm toán thường được kích hoạt chỉ bằng các thay đổi bản ghi. Nếu bạn cần đăng nhập các hành động tùy chỉnh mà không nhất thiết kích hoạt thay đổi cơ sở dữ liệu, bạn sẽ cần tạo trình ghi nhật ký của riêng mình. – eugen