gpt4 book ai didi

ruby-on-rails - rails/Papertrail : Changeset with association changes

转载 作者:行者123 更新时间:2023-12-04 05:51:50 26 4
gpt4 key购买 nike

我被困住了。我一直在试图弄清楚如何在具有 papertrail 的模型上包含关联更改( has_manyhas_many through )。我想调用MyModel.versions.first.changeset并将关联对象上发生的任何更改包含在 .changeset 中从该对象版本返回的哈希值。

我添加了版本关联的迁移:

class CreateVersionAssociations < ActiveRecord::Migration
def self.up
create_table :version_associations do |t|
t.integer :version_id
t.string :foreign_key_name, :null => false
t.integer :foreign_key_id
end
add_index :version_associations, [:version_id]
add_index :version_associations, [:foreign_key_name, :foreign_key_id], :name => 'index_version_associations_on_foreign_key'
end

def self.down
remove_index :version_associations, [:version_id]
remove_index :version_associations, :name => 'index_version_associations_on_foreign_key'
drop_table :version_associations
end
end


class AddTransactionIdColumnToVersions < ActiveRecord::Migration
def self.up
add_column :versions, :transaction_id, :integer
add_index :versions, [:transaction_id]
end

def self.down
remove_index :versions, [:transaction_id]
remove_column :versions, :transaction_id
end
end

我已将 Papertrail 添加到关联对象中,但据我所知,没有文档讨论检索发生在关联对象上的更改。如果可以使用 Papertrail,任何人都可以提供帮助吗?

我正在尝试实现对模型及其关联对象的更改的审计跟踪,这些对象可以在一个变更集中进行访问。

最佳答案

您需要的信息最终存储在相关表中versionsversion_associations .

但是,paper_trail没有为您提供以您想要的方式访问信息的方法。但是您可以自己编写一个自定义方法来获取对象的关联版本列表。

假设您有以下模型:

class Article < ApplicationRecord
has_many :comments
has_paper_trail
end

class Comment < ApplicationRecord
belongs_to :article
has_paper_trail
end

您可以找到文章对象的所有评论版本 article这边走:
PaperTrail::Version.where(item_type: 'Comment')
.joins(:version_associations)
.where(version_associations: { foreign_key_name: 'article_id', foreign_key_id: article.id })
.order('versions.created_at desc')

您可以修改 gem,或者将此方法定义为 Article 类的实例方法,以便您可以轻松调用它,例如 article.comment_versions
请注意,以上信息在 article.versions.first.changeset 中不可用。 ,因为如果您更改评论而不是文章,则文章没有版本,只有评论。

但是上面的方法允许您访问关联更改的历史记录。

关于ruby-on-rails - rails/Papertrail : Changeset with association changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31953162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com