Rails 6 PaperTrail 仅从一个模型中提取日志

Rails 6 PaperTrail pull logs from only one model

假设我在 Rails 6 应用程序中使用 PaperTrail gem - BookUser 跟踪两个模型。现在我想生成仅包含日志的 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