提问人:abax 提问时间:1/20/2023 更新时间:1/20/2023 访问量:112
Paper Trail 保存object_changes内的虚拟属性更改
Paper Trail saving virtual attribute changes within object_changes
问:
我正在尝试在其中保留虚拟属性更改,并且一直在使用该选项。object_changes
meta
has_paper_trail(
meta: {
status_name: proc { |foo| foo.status&.name }
}
)
正如文档中提到的,我添加到了表中,并且该属性确实得到了持久化。但是,它不是保存在哈希中,而是保存在其单独的列中,并且该值不包括前一个值。status_name
versions
object_changes
# version attributes:
object_changes:
"{\"updated_at\":[\"2023-01-18T22:50:22.394Z\",\"2023-01-18T22:50:22.408Z\"],\"status_id\":[1,2]}",
status_name: "Status 2"
这符合 gem 的预期,但我想将更改推送到并包含以前的值。我能够存储之前和之后更改的一种方法是使用标志创建一个新方法。但它看起来很笨拙,我想知道是否有人有其他选择:status_name
object_changes
meta
has_paper_trail(
meta: {
status_name: :track_status_name_changes
}
)
def track_status_name_changes
if versions.blank?
[nil, status&.name].to_json # "[null,\"Status 1\"]"
else
prev_name = JSON.parse(versions.last.status_name).last
[prev_name, status&.name].to_json # "[\"Status 1\",\"Status 2\"]"
end
end
我目前正在探索创建自己的适配器,如文档中所述:
PaperTrail.config.object_changes_adapter = MyObjectChangesAdapter.new
class MyObjectChangesAdapter
# @param changes Hash
# @return Hash
def diff(changes)
# ...
end
end
使用 meta 标志中的自定义方法,我能够跟踪虚拟属性的更改,但是,我还希望将这些更改存储在版本表的列中。object_changes
答: 暂无答案
评论