当前位置:  开发笔记 > 编程语言 > 正文

Rails&Acts-as-versioned:你会如何重新恢复记录?

如何解决《Rails&Acts-as-versioned:你会如何重新恢复记录?》经验,为你挑选了1个好方法。

如何以尊重REST约定和路由的方式还原记录?

我正在寻找如何设置我的routes.rb并构建链接和控制器操作以进行还原的示例.我发现的所有示例都是REST之前的rails.

我的理解是我需要在资源控制器中使用revert_to_version功能.



1> Milan Novota..:

我从来没有使用过特定版本的行为,但是当我遇到类似场景时,我通常解决它的方式是通过属性的具体化.换句话说,我只为资源的实际版本号创建一个新资源.

例如.

/resources/:id/actual_version

将指向id为id的资源的实际版本号.然后要更改实际版本,我们可以只需要PUT所需的数字.

PUT /resources/:id/actual_version
:version = 123

将我们的资源还原到版本123.

作为惯例,我使用类似"last-but-one"的值作为:version来引用实际版本之前的版本.

然后,为了回滚实际版本,我们可以这样做:

PUT /resources/:id/actual_version
:version=last-but-one

-

扩大我自己的答案:

在routes.rb中,我们可以执行以下操作:

  map.connect   '/resources/:id/actual_version', :controller => 'resources', :action => 'set_version', :conditions => { :method => :put } 

在resources_controller.rb中:

def set_version
  @resource = Resource.find_by_id(params[:id])
  if params[:version] && @resource
    version = params[:version] == "last-but-one" ? @resource.versions.last : params[:version]
    if @resource.revert_to(version)
      # Success, everything went fine!
    else
      # Error, the resource couldn't be reverted - unexisting version?
    end
  else
    # Error, version number or resource id is missing.
  end
end

希望能澄清我以前的想法.;)

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有