srb*_*ert 1 rest routing ruby-on-rails acts-as-versioned
如何以尊重REST约定和路由的方式还原记录?
我正在寻找如何设置我的routes.rb并构建链接和控制器操作以进行还原的示例.我发现的所有示例都是REST之前的rails.
我的理解是我需要在资源控制器中使用revert_to_version功能.
我从来没有使用过特定版本的行为,但是当我遇到类似场景时,我通常解决它的方式是通过属性的具体化.换句话说,我只为资源的实际版本号创建一个新资源.
例如.
/resources/:id/actual_version
Run Code Online (Sandbox Code Playgroud)
将指向id为id的资源的实际版本号.然后要更改实际版本,我们可以只需要PUT所需的数字.
PUT /resources/:id/actual_version
:version = 123
Run Code Online (Sandbox Code Playgroud)
将我们的资源还原到版本123.
作为惯例,我使用类似"last-but-one"的值作为:version来引用实际版本之前的版本.
然后,为了回滚实际版本,我们可以这样做:
PUT /resources/:id/actual_version
:version=last-but-one
Run Code Online (Sandbox Code Playgroud)
-
扩大我自己的答案:
在routes.rb中,我们可以执行以下操作:
map.connect '/resources/:id/actual_version', :controller => 'resources', :action => 'set_version', :conditions => { :method => :put }
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
希望能澄清我以前的想法.;)
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |