I'm encountering an issue with PaperTrail in my Rails application where I'm trying to store both controller-level and model-level metadata in the versions
table, but only the controller-level metadata (app_id
and org_id
) is being stored. Here's how I've configured it:
class Table < ApplicationRecord
self.table_name = 'tablename '
has_paper_trail meta: {
metadata: lambda { |record|
user = record.admin_apps_orgs_user.user
acted_user = {
id: user.id,
name: "#{user.given_name} #{user.family_name}",
email: user.email
}
controller_metadata = PaperTrail.request.controller_info.try(:[], :metadata) || {}
{
app_id: controller_metadata[:app_id],
org_id: controller_metadata[:org_id],
acted_user: acted_user
}
}
}
end`
# frozen_string_literal: true
module PapertrailInfoHelper
extend ActiveSupport::Concern
def info_for_paper_trail
{
metadata: {
app_id: params[:app_id],
org_id: params[:org_id]
}
}
end
end
module Api
module V1
class MyController < ApplicationController
include PapertrailInfoHelper
# Controller actions
Issue:
When I update records in AdminAppsOrgsUsersRole
, only the app_id
and org_id
from info_for_paper_trail
are stored in the versions table.
The acted_user
details from the lambda
block in has_paper_trail
metadata are not being stored. I've ensured that PaperTrail.request.controller_info
contains the correct :metadata
values in the Rails console.
Goal:
I want to store both controller-level (app_id
, org_id
) and model-level (acted_user
) metadata in the versions
table using PaperTrail.
How can I ensure that the acted_user
details are correctly captured and stored alongside app_id
and org_id
?