2011-12-30 12 views
13

Ho il seguente pulsante, che ho sovrascritto per generare una richiesta GET:button_to opzione metodo GET in Rails con

= button_to "Tutor", {:controller => "appointments", :action => "new", 
    :listing_id => @listing.id} , :method => :get 

Tuttavia, ho ancora ottenere una richiesta POST con params aggiuntivi: Metodo:

Processing by AppointmentsController#new as HTML 
    Parameters: {"authenticity_token"=>"AWkL", "listing_id"=>"2", "method"=>"get"} 

ho il mio file percorsi, ho:

resources :appointments 

che cosa ho fatto di sbagliato?

Grazie.

risposta

12

I pulsanti non devono inviare richieste GET.

Utilizzare invece link_to. Se vuoi che assomigli a un pulsante, applica alcuni CSS. Ecco un buon articolo: http://coding.smashingmagazine.com/2009/11/18/designing-css-buttons-techniques-and-resources/

+1

E i pulsanti di ricerca? Spesso usano le richieste 'GET'. – mwfearnley

+1

Questo non risponde alla domanda. Quando qualcuno chiede "Come faccio X?" sta cambiando l'argomento con cui rispondere, "Non dovresti fare X, ma Y." –

+1

@LukeLaupheimer: a volte (abbastanza spesso, infatti), questa è una risposta valida. Forse non in questo caso. –

1

si consiglia di guardare il UJS driver code:

a\[data-method\] è il selettore utilizzato qui:

Così il seguente dovrebbe funzionare (non poteva davvero testarlo):

button_to "Tutor", {...}, :html => { "data-method" => "get" } 
+0

Grazie Tigraine. La tua soluzione non funziona per me. Sospetto che ci possa essere un conflitto tra Prototype (che ho rimosso) con jQuery che mi impedisce di forzare un metodo get. – AdamNYC

+0

Ah scusa .. Ho appena guardato il codice UJS e ho pensato che questo dovrebbe funzionare .. Almeno se usi un tag '' dovrebbe essere – Tigraine

30

Basta usare metodo: e : ottenere

button_to "New User", new_user_path, method: :get 
+0

Questo è quello che usa, no? –

+1

Nel caso abbiate alcune opzioni html, ricordatevi di avvolgere tutto in un hash: 'button_to" New User ", new_user_path, {method: 'get', class:" some-class "}' – borjagvo

+0

Oppure se avete bisogno di usare un path hash, assicurati di separare il 'metodo' da esso:' button_to "Frob User", {action:: frob, id: user.id}, metodo:: get' – mwfearnley

Problemi correlati