Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails/PaperTrail:批准编辑_Ruby On Rails_Versioning_Paper Trail Gem - Fatal编程技术网

Ruby on rails Rails/PaperTrail:批准编辑

Ruby on rails Rails/PaperTrail:批准编辑,ruby-on-rails,versioning,paper-trail-gem,Ruby On Rails,Versioning,Paper Trail Gem,在我正在开发的应用程序中,我们使用PaperTrail不仅可以跟踪原始用户所做的更改,还可以跟踪对具有“参与者”角色的用户所做的更改,该用户有权更改授权的配置文件 有一点我不能总结,那就是不允许未经批准的纸质版本不显示为“实时”。我们将在一个仪表板区域中构建,配置文件所有者将在其中批准编辑。只是需要一些指导。谢谢 我将使用两个不同的类:一个用于保存已批准的实时用户,另一个用于保存已提交的未批准用户。让我们称他们为User和PendingUser 您可以让PendingUser从User继承所有内

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


有一点我不能总结,那就是不允许未经批准的纸质版本不显示为“实时”。我们将在一个仪表板区域中构建,配置文件所有者将在其中批准编辑。只是需要一些指导。谢谢

我将使用两个不同的类:一个用于保存已批准的实时用户,另一个用于保存已提交的未批准用户。让我们称他们为
User
PendingUser

您可以让
PendingUser
User
继承所有内容,只需覆盖
表的名称即可。或者,更好的情况是,两者都可以有一个从中继承的公共类,例如,
BaseUser
(或一个公共关注点)。您还需要一个原始
用户
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
类BaseUser
#以前在用户类中的所有内容
结束
类用户
现在有两种设置书面记录的方法,这将导致两种不同的方法:

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

  • 专用类和表:PaperTrail versions用户作为
    用户版本
    ,这意味着您需要提供一个
    PendingServerVersion
    类和表(非常简单,只需从
    用户版本
    继承所有内容,从
    表名

  • 到目前为止还不错。如果允许您的贡献者查看由其他贡献者创建的挂起用户,那么您就基本完成了-您只需要编写批准机制的逻辑:基本上,您将
    PendingUser
    的实时版本的属性复制到
    用户的实时版本中(当然,除了
    PendingUser#user_id
    之外)。在批准更改后,您可能希望删除
    PendingUser
    PendingUser
    版本,或者选择所有这些版本并将其类更改为
    user
    将未批准的版本与已批准的版本合并)

    如果您的贡献者被禁止查看其他待处理的贡献,那么您将拥有一个用户与多个待处理者的关系。这可能会变得更复杂,因为您需要考虑在批准一个用户后,其他贡献者如何处理所有其他待处理者将引用过时的用户版本

    祝你好运

    编辑:将用户引用添加到PendingUser