Ich habe nie Acts-as-Versioned im Besonderen verwendet, aber wenn ich auf ähnliche Szenarien stoße, ist die Art, wie ich es normalerweise löse, durch Verdinglichung des Attributs. Mit anderen Worten, ich würde eine neue Ressource nur für die tatsächliche Versionsnummer der Ressource erstellen.
Eg.
/resources/:id/actual_version
würde auf die tatsächliche Versionsnummer der Ressource mit ID: ID verweisen. Um dann die aktuelle Version zu ändern, können wir einfach die gewünschte Nummer eingeben.
PUT /resources/:id/actual_version
:version = 123
würde unsere Ressourcen auf die Version wiederherstellen 123
Als Konvention ich so etwas wie „last-but-one“ verwenden würde, als ein Wert von: Version auf die Version zu beziehen, die voran der tatsächliche.
Dann die aktuelle Version rückgängig zu machen, können wir nur tun:
PUT /resources/:id/actual_version
:version=last-but-one
-
meine eigene Antwort Expanding:
In routes.rb wir so etwas wie tun:
map.connect '/resources/:id/actual_version', :controller => 'resources', :action => 'set_version', :conditions => { :method => :put }
Und in 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
Hoffe, dass meine früheren Gedanken ein wenig geklärt hat. ;)