如何以尊重REST约定和路由的方式还原记录?
我正在寻找如何设置我的routes.rb并构建链接和控制器操作以进行还原的示例.我发现的所有示例都是REST之前的rails.
我的理解是我需要在资源控制器中使用revert_to_version功能.
我从来没有使用过特定版本的行为,但是当我遇到类似场景时,我通常解决它的方式是通过属性的具体化.换句话说,我只为资源的实际版本号创建一个新资源.
例如.
/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
希望能澄清我以前的想法.;)