2013-01-14 12 views
8

Ho un modulo di base che utilizza l'helper form_tag funzionante, ma voglio aggiungere un pulsante di annullamento, qual è la sintassi per farlo? Desidero che il pulsante Annulla appaia come un pulsante, non un collegamento, quindi porta l'utente a un URL diverso (a indicare che non desidera inviare il modulo).Ruby on Rails: come implementare il pulsante Annulla in form_tag

TY, Fred

+0

cosa vuoi che faccia? – hdgarrood

risposta

21

Se si desidera cancellare/ripristinare i campi del modulo, fare ciò che suggerisce dchacke.

Tuttavia, generalmente mi aspetto un pulsante Annulla per non cancellare il modulo, ma per portarmi via dal modulo, nel senso che non ho intenzione di inviarlo.

Se si desidera che il secondo, mi piacerebbe solo fare un collegamento (o il pulsante) per la pagina che si vuole andare a su di annullamento, come ad esempio:

=link_to 'Cancel', my_page_path 

o se si desidera un pulsante:

= button_tag "Cancel", :type => 'button' 

Quindi aggiungere questo per il controller:

before_filter :check_for_cancel, :only => [:create, :update] 

def check_for_cancel 
    if params[:commit] == "Cancel" 
    redirect_to my_page_path 
    end 
end 
+0

Quanto sopra farà apparire il collegamento Annulla come un pulsante? Questo è quello che mi piacerebbe. –

+0

Ho aggiornato la risposta – 99miles

+0

Grazie, sembra buono, sto ricevendo l'errore "ActionView :: Template :: Error (metodo non definito' button_tag 'per # <# : 0xb2a2e4d4>): "ora tuttavia, sembra non gli piace l'elemento button_tag? –

22

Se vuoi dire un pulsante di reset, incolla il seguente all'interno del vostro modulo:

<%= button_tag "Reset", type: :reset %> 

testato, funziona benissimo e ripristina tutti i campi del modulo.

+0

Scusa avrei dovuto essere più chiaro, non voglio resettare i campi, annullo per annullare il modulo e andare a un URL diverso. –

2

Invece di un tag presentare, vorrei suggerire un tag <button>, perché il parametro :commit potrebbe essere localizzato, rendendo così difficile valutare nel controller.

A button_tag può avere un nome/valore come qualsiasi altro campo, quindi è possibile creare praticamente un flag con esso.

Il codice che segue è quello che vorrei utilizzare:

nella vista:

<%= button_tag t('buttons.cancel'), type: "submit", name: "cancel", value: true %> 

nel controller:

before_filter :redirect_cancel, only: [:create, :update] 

private 

def redirect_cancel 
    redirect_to my_page_path if params[:cancel] 
end 

Molto più pulito imho, perché si basano su un flag invece di un valore di visualizzazione (potenzialmente) localizzato.

1

button_to sembra un modo semplice per ottenere lo stesso, ma deve essere messo al di fuori del modulo stesso, ma che può essere facilmente risolto con css.

Inoltre, per risolvere questo in un modo più generico (anche lavorando per modificare le risorse annidate su una risorsa che non è stata ancora mantenuta), è possibile creare un modulo separato per l'annullamento che contiene tutti i valori originali come campi nascosti .