加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails / PaperTrail:批准编辑

发布时间:2020-12-17 02:21:59 所属栏目:百科 来源:网络整理
导读:在我正在开发的应用程序中,我们使用PaperTrail不仅可以跟上原始用户所做的更改,还可以了解对具有“贡献者”角色的用户所做的更改,该用户可以访问授权配置文件. 我不能放在一起的一件作品是不允许未经批准的paper_trail版本不显示为“live”.我们将在仪表板区
在我正在开发的应用程序中,我们使用PaperTrail不仅可以跟上原始用户所做的更改,还可以了解对具有“贡献者”角色的用户所做的更改,该用户可以访问授权配置文件.

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

解决方法

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

您可以让PendingUser从User继承所有内容,只是覆盖table_name.或者,事件更好,两者都可以有一个他们继承的共同类 – 例如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

现在有两种设置PaperTrail的方法,这将导致两种不同的方法:

>默认方式 – PaperTrail使用版本模型存储所有内容.这意味着User和PendingUser都将在此处序列化,因此无需进行任何更改
>专业课程& tables:PaperTrail版本用户为UserVersion,这意味着您需要提供PendingUserVersion类和& table(非常简单,只需从UserVersion继承所有内容,从table_name继承appart).

到现在为止还挺好.如果你的贡献者被允许看到由其他贡献者创建的待定用户,那么你已经完成了 – 你只想编写批准机制的逻辑:基本上你将PendingUser的实时版本的属性复制到用户的实时版本(当然除了PendingUser#user_id).批准更改后,您可能希望删除PendingUser和PendingUser版本,或者选取所有这些版本并将其类更改为User(将未批准的版本与已批准的版本合并).

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

祝好运!

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读