Rails / PaperTrail:批准编辑

时间:2014-01-20 20:34:00

标签: ruby-on-rails versioning paper-trail-gem

在我正在处理的应用程序中,我们使用PaperTrail不仅跟上原始用户所做的更改,还通过对具有“贡献者”角色的用户所做的更改,这些用户有权进行更改授权的个人资料。

我不能放在一起的一件作品是不允许未经批准的paper_trail版本不显示为“live”。我们将在仪表板区域构建,配置文件所有者将批准编辑。只是需要一些指导。谢谢!

1 个答案:

答案 0 :(得分:3)

我会使用两个不同的类:一个用于保存直播,已批准的用户,另一个用于保存提供的,未经批准的用户。我们称他们为UserPendingUser

您可以让PendingUser继承User的所有内容,然后覆盖table_name。或者,事件更好,两者都可以有一个他们继承的共同类 - 例如BaseUser(或常见的关注)。您还需要对原始UserPendingUser#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 的方法,这将导致两种不同的方法:

  1. 默认方式 - PaperTrail使用Version模型存储所有内容。这意味着UserPendingUser都将在此处序列化,因此无需更改任何内容

  2. 专业课程&amp;表格:PaperTrail版本用户为UserVersion,这意味着您需要提供PendingUserVersion类&amp; table(非常简单,只需从UserVersion继承所有内容,从table_name继承。

  3. 到目前为止一切顺利。如果你的贡献者被允许看到由其他贡献者创建的待定用户,那么你已经完成了 - 你只想为批准机制编写逻辑:基本上你复制了PendingUser的实时版本User的实时版本(当然,PendingUser#user_id除外)。批准更改后,您可能需要删除PendingUserPendingUser版本,或者选取所有这些版本并将其类更改为User合并未批准已批准的版本)。

    如果您的贡献者允许看到彼此待处理贡献,那么您将拥有用户拥有多个PendingUsers 关系。它可能会变得有点复杂,因为您需要考虑在批准用户之后,其他贡献者制作的所有其他PendingUsers将如何引用过时的用户版本。

    祝你好运!

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