2012-08-08 7 views

risposta

12

se l'oggetto passato alla forma è persisted?, il costruttore modulo sa che sei aggiornando un oggetto e quindi renderà un'azione PUT. Se non è persistente, allora sa che stai creando un nuovo oggetto e utilizzerà POST.

<%= form_for @user do |f| %> 
    <%= f.button %> 
<% end %> 

Se @user è un nuovo record, POST viene utilizzato e l'etichetta pulsante diventa Create User, tuttavia PUT viene utilizzato e l'etichetta diventa Update User. Non c'è molto di più.

+0

Grazie. Ho finito per usare created_at, mentre stavo accedendo al mio modello con js lato client, con @model esposto come hash di gon. Quindi mi rimanevano solo le proprietà con cui lavorare. – Undistraction

3

I moduli che modificano le risorse esistenti utilizzano PUT, i moduli che creano una nuova risorsa utilizzano POST. Come da standard REST descritto here.

dai binari codice form_for aiutante:

action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :put] : [:new, :post] 

e persisted? per ActiveRecord è dichiarato come:

!(new_record? || destroyed?) 
+0

La mia domanda era come Rails decide quale metodo impostare sul modulo. Che cosa sta usando per decidere? – Undistraction

+0

Aggiornato, è quello che volevi? – PinnyM

+0

Grazie. Paura @hgmnz ti ha battuto per il pugno però. – Undistraction