gpt4 book ai didi

ruby-on-rails - rails/PaperTrail : approving edits

转载 作者:行者123 更新时间:2023-12-03 15:54:14 25 4
gpt4 key购买 nike

在我正在开发的应用程序中,我们使用 PaperTrail 不仅可以跟上原始用户所做的更改,还可以跟上对有权更改授权配置文件的“贡献者”角色的用户所做的更改.

我不能放在一起的一件是不允许未经批准的 paper_trail 版本不显示为“实时”。我们将在个人资料所有者将批准编辑的仪表板区域中进行构建。只是需要一些指导。谢谢!

最佳答案

我会使用 两个不同的类(class) : 一个用于保存实时的、已批准的用户,另一个用于保存贡献的、未批准的用户。我们就叫他们UserPendingUser .

你可以有PendingUserUser 继承一切并覆盖table_name .或者,更好的是,两者都可以有一个它们继承自的公共(public)类 - 例如BaseUser (或共同关心的问题)。您还需要引用原始 User ( PendingUser#user_id ),以便知道更改属于谁。因此,您需要为 pending_users 编写迁移。表和类似的东西:

class BaseUser
# Everything that used to be within your User class
end

class User < BaseUser
self.table_name = 'users'
has_one :pending_user # Or has_many, see the last paragraph
end

class PendingUser < BaseUser
self.table_name = 'pending_users'
belongs_to :user
end

现在有两种设置方式 纸轨 ,这将导致两种不同的方法:
  • 默认方式 - PaperTrail 使用 Version 存储所有内容模型。这意味着 UserPendingUser将在此处序列化,因此无需更改任何内容
  • 专业类(class)和表格 : PaperTrail 版本用户为 UserVersion ,这意味着您需要提供 PendingUserVersion类和表(非常简单,只需从 UserVersion 继承所有内容,从 table_name 继承)。

  • 到现在为止还挺好。如果允许您的贡献者查看其他贡献者创建的待处理用户,那么您就大功告成了——您只需编写 的逻辑即可。审批机制 : 基本上你复制了 PendingUser 的 live 版本的属性。到 User 的实时版本(当然, PendingUser#user_id 除外)。批准更改后,您可能希望删除 PendingUserPendingUser版本,或者选择所有这些版本并将它们的类更改为 User ( 未批准的版本与已批准的版本合并)。

    如果您的贡献者是 不是 允许见面 待定贡献,那么您将获得 User has-many PendingUsers 关系。它可能会变得有点复杂,因为您需要考虑在批准用户之后,其他贡献者创建的所有其他 PendingUser 将如何引用过时的用户版本。

    祝你好运!

    编辑:添加了对 PendingUser 的用户引用。

    关于ruby-on-rails - rails/PaperTrail : approving edits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21243613/

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