2013-07-29 3 views
15

In considerazione simple_form, il pulsante di invio è come questo:C'è un modo per passare params quando si fa clic sul pulsante di invio nella vista simple_form in rails 3.2.12?

<%= f.button :submit, 'Save' %> 

Stiamo cercando di passare un params subaction quando si fa clic sul pulsante Save. params[:subaction] dovrebbe avere il valore di 'aggiornamento' dopo aver fatto clic sul pulsante. Ecco quello che abbiamo provato in vista, ma non ha funzionato:

<%= f.button :submit, 'Save', :subaction => 'update' %> 

C'è un modo per passare un valore in params[:subaction] quando si fa clic sul pulsante Save?

risposta

27

Utilizzare l'opzione nome e valore.

<%= f.button :submit , name: "subaction",value: "update"%> 

Nel vostro controller otterrete params [: sottoazione] con il "aggiornamento" valore

+0

Provato <% = f.button: submit, nome: 'subaction', valore: for_which,: class => BUTTONS_CLS ['action']%> e for_which è una stringa e params [: subaction] è nil. Non ha funzionato. – user938363

+0

Sto usando questo codice e sto lavorando. Si prega di consultare il registro durante l'invio del modulo, indipendentemente dal fatto che i parametri siano inviati o meno. –

+8

appena provato questo e funziona per quello che mi serve, ma sta cambiando il testo del pulsante di invio per il valore di "valore:" - c'è un modo per mantenere il nome/valore dando al controller le informazioni di cui ha bisogno pur avendo un nome della mia scelta per il pulsante di invio? es .: il testo del pulsante deve essere "prossimo studente" ma è "2" '<% = f.submit" Next student ",: class => 'big_button round unselectable', nome:" student_group_id ", valore: @ student_group.id%> ' – dax

15

come sottolinea Dax,

<%= hidden_field_tag(:subaction, 'update') %> 
<%= f.button :submit, 'Save' %> 

Ciò fornirà il valore della stringa 'aggiornamento' a l'azione del controller in routing tramite il campo nascosto. Esso può quindi essere recuperato dal controllore con

params[:subaction] 
6

Specificando f.button :button, type: 'submit', possiamo usare gli attributi name e value come segue presentare utilizzando un singolo parametro. In particolare, il valore inviato (ad esempio "torta") potrebbe essere diverso dal testo del pulsante (ad es. "La torta migliore").

_form.html.erb

<%= f.button :button, 'The Best Cake', type: 'submit', name: 'dessert_choice', value: 'cake' %> 
<%= f.button :button, 'The Best Pie', type: 'submit', name: 'dessert_choice', value: 'pie' %> 

controller

def controller_action 
    dessert_choice = params[:dessert_choice] # 'cake' or 'pie' 
end 

Questo approccio evita la necessità per gli ingressi nascosti come @dax menzionato nel commento di cui sopra.

Testato su Simple Form 3.3.1 con Rails 4.2.