2 Stimmen

Einen Assistenten erstellen, der mit mehreren Ressourcen arbeitet

Ich schreibe eine Anwendung, die einen Eingabebereich vom Typ "Assistent" hat. Denken Sie an MS Windows Installer.

Ich habe eine harte Zeit herauszufinden, wie die meisten RESTful Weg, dies mit Schienen zu tun. Ich kann es in einer nicht-restful Weise geschehen (bereits für Version 1 der app), aber ich versuche, ein wenig mehr idiomatisch dieses Mal herum sein.

Die Situation ist wie folgt. Ich habe einen 5-stufigen Assistenten, der Informationen sammeln soll. Die Schritte 1, 2 und 4 befassen sich mit Ressource A. Schritt 3 befasst sich mit Vielfachen von Ressource B und muss sie mit Ressource A verknüpfen. Schritt 5 ist nur eine Bestätigung.

Ich habe also meine resourceA_controller und meine resourceB_controller ... aber sie nur speichern/aktualisieren, dass eine Ressource. Ich vermute, dass ich eine wizard_controller für jeden der Schritte im Prozess einrichten sollte, aber ich bin nicht sicher, wie das Routing funktionieren sollte.

Zum Beispiel...

WizardController < ApplicationController
  def stepOne
    @resourceA = ResourceA.new
  end
  def stepTwo
    @resourceA = params[:id]
  end
  ...
  def stepFive
  end
end

Und dann würde ich meinen Blick auf die StepOne-Ansicht richten:

<form action='/resourceA/new'/>

und bei der StepTwo-Aktion

<form action='/resourceA/12345/edit'/>

usw.

Aber dann müssten meine resourceA- und resourceB-Controller wissen, wie sie an den entsprechenden Schritt im wizard_controller weiterleiten können. Verwirrendes Durcheinander!

Bin ich auch nur annähernd auf dem richtigen Weg? Oder gibt es einen in Rails eingebauten Mechanismus oder ein Plugin, das diese Art von Dingen tut.

1voto

Gareth Punkte 123487

Es ist wichtig, den Unterschied zwischen dem, was REST bietet, und dem, was REST nicht interessiert, zu verstehen.

  • Ein RESTful-Dienst bietet einen minimalen Satz von Aktionen, die ein Client verwenden kann (sofern er das richtige Datenformat kennt), um eine Klasse von Ressourcen zu bearbeiten

    • Sie sollten zum Beispiel in der Lage sein, POST an /resourceA/12345 um diese vorhandene Ressource zu bearbeiten
  • Ein RESTful-Dienst gibt keine Garantien darüber, welche anderen URLs sinnvolle Antworten zurückgeben werden.

    • Ein bemerkenswertes Beispiel ist, dass REST nicht vorschreibt, dass /resourceA/12345/edit gibt ein HTML-Formular für die Bearbeitung der Ressource zurück. Dies ist eine Funktion der HTML-Anwendung, die einfach eine Methode zur Durchführung des oben beschriebenen POST bietet.

    • Erweitert man diese Theorie, ist es durchaus akzeptabel, mehrere Bearbeitungsformulare zu haben, die alle an die definierte RESTful-URL posten. Da die Controller's edit Aktion wird im Allgemeinen die .attributes = ... können Sie anhand der übergebenen Attribute und der Informationen darüber, welche HTML-Schaltfläche zum Absenden des Formulars verwendet wurde, entscheiden, welche Seite der Benutzer als nächstes sehen soll.

    • Es mag beängstigend sein, sich auf eine Controllermethode zu verlassen, um mit mehreren Seitenübertragungen umzugehen, aber mit geschickter Validierung und selektivem Überschreiben von Accessors können Sie viel Kontrolle darüber behalten, wie Benutzer auf die App zugreifen.

    • Sie sollten auch in der Lage sein, herauszufinden, dass diese Methode die Benutzer nicht darauf beschränkt, die Attribute nur in der im Formular angegebenen Reihenfolge zu senden. Ein anderer RESTful-Client könnte theoretisch POST-Aktualisierungen für 何れも Attribute, die mit einer Ressource verbunden sind, und nicht nur die, die auf einer Seite Ihres Assistenten angezeigt werden. Vorausgesetzt, Ihre Modellmethoden sind robust genug, kann alles einfach funktionieren.

0voto

Robert Harvey Punkte 173098

Versuchen Sie dies JQuery-Assistent-Plugin :

http://worcesterwideweb.com/2007/06/04/jquery-wizard-plugin/

Eine Demo dazu gibt es hier:

http://worcesterwideweb.com/jquery/wizard/

0voto

gir Punkte 1331

Sie können Folgendes verwenden aasm Das ist genau das, wonach Sie suchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X