저는 특히 행위와 같이 버전을 사용하지는 않았지만, 비슷한 시나리오를 발견 할 때 일반적으로 해결 방법은 속성을 구체화하는 것입니다. 즉, 리소스의 실제 버전 번호에 대해서만 새 리소스를 만듭니다.
예 :
/resources/:id/actual_version
은 id가 id 인 자원의 실제 버전 번호를 가리 킵니다. 실제 버전을 변경하려면 원하는 번호를 입력하면됩니다.
PUT /resources/:id/actual_version
:version = 123
내가 좋아하는 뭔가를 사용하는 것, 컨벤션으로 버전 123
에 우리의 자원을 되돌릴 것 "마지막하지만 - 하나"의 값 : 선행 버전을 참조하는 버전 실제 것.
그런 다음, 실제 버전을 롤백하기 위해, 우리는 다만 할 수 있습니다 : - : 우리처럼 뭔가를 할 수 routes.rb에서
:
PUT /resources/:id/actual_version
:version=last-but-one
내 자신의 대답을 확장
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
내 이전의 생각을 조금 분명하게 해주는 희망. ;)