2010-04-08 12 views
18

Sto cercando di capire le migliori opzioni per estrarre un modulo wizard in ruby ​​on rails. Idealmente mi piacerebbe averlo in modo che l'iscrizione all'applicazione abbia un pulsante indietro e successivo che permetta all'utente di inviare i dati in passaggi.come creare i moduli wizard in ruby ​​on rails

Quindi nel passaggio 1 potrebbero inserire le informazioni di contatto. Una volta terminato, potrebbero fare clic su Avanti ed essere sul passaggio 2 per compilare le informazioni di pagamento, ecc. Se commettono un errore, possono fare clic indietro e correggerlo. Alcuni passaggi saranno necessari, mentre altri non lo faranno, ma dovrai farlo fino all'ultimo passaggio per inviare i dati al database per iscriverti. Hanno quindi bisogno della possibilità di tornare indietro e completare i passaggi passati nello stesso modo dopo il completamento. (esempio: forse se hanno cliccato su un link profilo potrebbero ricomporre i passaggi nello stesso modo perché non volevano completare subito tutti i passaggi. Forse ricevendo un pulsante di salto prima di completare i passaggi per iscriversi?). Ho anche bisogno di convalida per accadere su quali passi sono stati completati impedendo loro di passare alla fase successiva fino alla corretta o completata.

Opzione 1) Ho notato che ajax è stato consigliato come opzione in altre domande su StackOverflow. L'unico problema che ho con esso è che l'utente non sarebbe in grado di registrarsi se javascript è stato disabilitato. Idealmente mi piacerebbe che fosse nativo di ruby ​​on rail, ma sono disposto a lavorare con tutto il necessario per farlo funzionare.

risposta

15

Ci sono un paio di plugins che forniscono facilitazione della costruzione di Wizzard in rotaie.
Acts as Wizard e Wizardly sembrano i più popolari.
L'idea principale è:
* creare un modello nella prima fase
* poi modificarla in fasi successive,
* applicando validazione parziale su ogni passo e
* avente il modello attuare una sorta di macchina a stati .

+1

Grazie, darò sicuramente uno scatto. –

+0

Questo è un buon metodo (specialmente quando si tratta di upload di file), ma nessuna di queste gemme funziona con Rails 3. Ce ne sono altre disponibili? –

+0

Non so, forse provate a portarne uno, non dovrebbe essere difficile, o crearne uno, la tecnica è un frutto piuttosto basso. – clyfe

16

Si dovrebbe guardare questo episodio Cast rotaie sulle forme più fasi:

http://railscasts.com/episodes/217-multistep-forms

Siate pronti a tornare indietro e guardare di nuovo. È molto veloce!

+0

Grazie per la raccomandazione. In realtà sono un assiduo osservatore dei calchi di Ryan e l'ho trovato anche da solo. Grazie comunque. –

3

Un approccio alternativo, per le forme più fasi più semplici soprattutto, è quello di semplicemente mostra-nasconde le parti di un singolo modulo a seconda del passo, in questo modo non colpisci il database ad ogni passaggio ma piuttosto permetti all'utente di costruire il suo oggetto finché non è pronto con un'istanza valida.

Un simile approccio favorisce fortemente l'utilizzo di una classe di form invece di lavorare direttamente con il modello (http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/) ed è necessario modificare leggermente il rendering dei messaggi di errore.

Pro: un solo db di successo, nessun problema con persistenti casi non validi (non colonne nulli, before_save controlli di integrità per gli attributi incasinato), senza callback inferno

Contro: più HTML inviato all'utente, modifiche dei messaggi di errore, richiede una classe di forma ben costruita per essere elegante e davvero utile