Rails 数据变更的审核问题

syutran · 2016年10月12日 · 最后由 308820773 回复于 2019年03月23日 · 2067 次阅读

关于数据变更的新旧数据保留问题

我的《电子设备登记管理系统》做的这时有点复杂哈:

计划:二级分支机构的管理员负责增改删,一级机构的管理员负责审核通过。增加和删除都好设计,增加个字段,标记一个状态就可以了。但问题出在了修改记录上—— 二级系统管理员修改了一条记录,需要一级管理员审核后才能生效。再审核之前,原数据仍作为有效数据。 呵呵,这个原数据怎么保存?需要复制一条记录吗?如果在审核通过前二级管理员把这条记录又编辑一次呢? 这问题对我来说有些复杂~

求指点:

如果用 workflow 来操作的话能否解决问题

  • 二级提交后该数据进入 workflow,由一级进行审批
  • 二级需要修改数据的话,自行申请退回后修改,再进行提交
  • 一级审批通过后修改线上数据
  • 一级审批未通过则返回二级提交者进行数据修改

代码写的有点丑,哈,也就这水平了~

def update
     @old_device = Device.find(params[:id])
     if @old_device.copy_id.blank?  then
       @new_device = @old_device.dup
       @new_device.copy_id = @old_device.id
       respond_to do |format|
         if @new_device.update(device_params)                                                                                         
           format.html { redirect_to events_path(:branch => @new_device.branch), notice: 'Device was successfully updated.' }
           format.json { render :show, status: :ok, location: @device }
         else
           format.html { render :edit }
           format.json { render json: @device.errors, status: :unprocessable_entity }
         end
       end
       @new_device.save  #这个save有点多余
       @old_device.status += 10
       @old_device.save
     else
       respond_to do |format|
         if @old_device.update(device_params)
           format.html { redirect_to events_path(:branch => @old_device.branch), notice: 'Device was successfully updated.' }
           format.json { render :show, status: :ok, location: @device }
         else
           format.html { render :edit }
           format.json { render json: @device.errors, status: :unprocessable_entity }
         end
       end
     end
   end

建议对于增改删操作额外建立模型来记录,审核通过时,读取相关记录,执行真实操作

mimosa 回复

paper_trail 这个 gem 是在 数据保存以后, 记录数据的变更历史. 对于审核, 我们可能希望在审核通过之前, 仍然使用老的属性, 在审核通过之后才使用新的属性.

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册