Se stai usando render
, quando l'utente aggiorna la pagina , invierà di nuovo la precedente richiesta POST. Ciò potrebbe causare risultati indesiderati come l'acquisto duplicato e altri.
Ma se si sta utilizzando redirect_to
, quando l'utente aggiorna la pagina, sarà solo chiedere ancora una volta che la pagina stessa. Questo è anche noto come il modello Post/Redirect/Get (PRG).
Così il luogo in cui deve essere utilizzato redirect_to
è quando si sta facendo una richiesta HTTP POST e non si desidera che l'utente per inviare nuovamente la richiesta quando è fatto (che può causare gli elementi duplicati e altri i problemi).
In Rails, quando un modello non viene salvato, render
viene utilizzato per visualizzare nuovamente il modulo con le stesse voci che sono state precedentemente compilate. Questo è più semplice perché se si utilizza il reindirizzamento, è necessario passare le voci del modulo utilizzando i parametri o la sessione. L'effetto collaterale è che se si aggiorna il browser, proverà a inviare nuovamente le voci del modulo precedente. Questo è accettabile perché probabilmente fallirà allo stesso modo, o se ha successo ora, è comunque ciò che l'utente dovrebbe aspettarsi in ogni caso.
Per ulteriori informazioni approfondite su render
e redirect
, è necessario leggere questo article.
Grazie. Questa è una spiegazione approfondita. – user938363
Non penso di aver visto una spiegazione più perfetta, in particolare con WHY è importante con le differenze pratiche di casi d'uso alla fine. – ahnbizcad
Nota: l'aggiornamento * non * equivale alla semplice pressione di invio nella barra degli indirizzi.Premendo Invio nella barra degli URL viene semplicemente inviata una richiesta GET a tale URL. L'aggiornamento ripresenta l'ultima richiesta (di cui il browser tiene traccia). –