Rails 6 PaperTrail 仅从一个模型中提取日志
Rails 6 PaperTrail pull logs from only one model
假设我在 Rails 6 应用程序中使用 PaperTrail gem - Book
和 User
跟踪两个模型。现在我想生成仅包含日志的 CSV 文件,其中仅包含 Book
模型活动。如何如何只为一个模型提取版本,例如Book
?
# models
class Book
has_paper_trail
end
class User
has_paper_trail
end
#call method for csv_generator service
def call
CSV.generate(col_sep: ';', write_headers: true, headers: LOG_HEADERS, encoding: 'UTF-8') do |csv|
PaperTrail::Version.includes([:item]).limit(50).order(id: :desc).each do |v|
tracked_data(v)
csv << [v.created_at.in_time_zone('CET'),
v.event,
version.whodunnit,
@new_data_value]
end
end
end
现在我可以同时从 Book 和 User 模型获取日志,而不仅仅是 Book
。
默认迁移添加一个 item_type
列,用于跟踪 tables。
在给定的情况下,您可以这样做:PaperTrail::Version.where(item_type: 'Book')
这将为您找到书中所有更改的所有版本 table。
如果您想对每本书的实例进行操作,则只需:
Book.all.each do |book|
book.versions
end
假设我在 Rails 6 应用程序中使用 PaperTrail gem - Book
和 User
跟踪两个模型。现在我想生成仅包含日志的 CSV 文件,其中仅包含 Book
模型活动。如何如何只为一个模型提取版本,例如Book
?
# models
class Book
has_paper_trail
end
class User
has_paper_trail
end
#call method for csv_generator service
def call
CSV.generate(col_sep: ';', write_headers: true, headers: LOG_HEADERS, encoding: 'UTF-8') do |csv|
PaperTrail::Version.includes([:item]).limit(50).order(id: :desc).each do |v|
tracked_data(v)
csv << [v.created_at.in_time_zone('CET'),
v.event,
version.whodunnit,
@new_data_value]
end
end
end
现在我可以同时从 Book 和 User 模型获取日志,而不仅仅是 Book
。
默认迁移添加一个 item_type
列,用于跟踪 tables。
在给定的情况下,您可以这样做:PaperTrail::Version.where(item_type: 'Book')
这将为您找到书中所有更改的所有版本 table。
如果您想对每本书的实例进行操作,则只需:
Book.all.each do |book|
book.versions
end