在我正在处理的应用程序中,我们使用PaperTrail不仅跟上原始用户所做的更改,还通过对具有“贡献者”角色的用户所做的更改,这些用户有权进行更改授权的个人资料。
我不能放在一起的一件作品是不允许未经批准的paper_trail版本不显示为“live”。我们将在仪表板区域构建,配置文件所有者将批准编辑。只是需要一些指导。谢谢!
答案 0 :(得分:3)
我会使用两个不同的类:一个用于保存直播,已批准的用户,另一个用于保存提供的,未经批准的用户。我们称他们为User
和PendingUser
。
您可以让PendingUser
继承User
的所有内容,然后覆盖table_name
。或者,事件更好,两者都可以有一个他们继承的共同类 - 例如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 的方法,这将导致两种不同的方法:
默认方式 - PaperTrail使用Version
模型存储所有内容。这意味着User
和PendingUser
都将在此处序列化,因此无需更改任何内容
专业课程&amp;表格:PaperTrail版本用户为UserVersion
,这意味着您需要提供PendingUserVersion
类&amp; table(非常简单,只需从UserVersion
继承所有内容,从table_name
继承。
到目前为止一切顺利。如果你的贡献者被允许看到由其他贡献者创建的待定用户,那么你已经完成了 - 你只想为批准机制编写逻辑:基本上你复制了PendingUser
的实时版本User
的实时版本(当然,PendingUser#user_id
除外)。批准更改后,您可能需要删除PendingUser
和PendingUser
版本,或者选取所有这些版本并将其类更改为User
(合并未批准已批准的版本)。
如果您的贡献者不允许看到彼此待处理贡献,那么您将拥有用户拥有多个PendingUsers 关系。它可能会变得有点复杂,因为您需要考虑在批准用户之后,其他贡献者制作的所有其他PendingUsers将如何引用过时的用户版本。
祝你好运!编辑:添加了对PendingUser的用户引用。