17
def update 
    @album = Album.find(params[:id]) 
    if @album.update_attributes(params[:album]) 
    redirect_to(:action=>'list') 
    else 
    render(:action=>'edit') 
    end  
end 

Un tutorial Rails 1.1.6 che sto trattando consiglia di utilizzare il metodo update_attributes per l'aggiornamento di un modello, come nel codice di esempio dal mio controller sopra elencato. Guardando la documentazione di Rails mi chiedo perché il metodo update non sarebbe stato preferito, soprattutto perché è stato chiamato così logicamente.Il metodo Rails update_attributes è la scelta migliore per eseguire un aggiornamento di un modello nel database?

+1

Questo articolo su * [5 modi per impostare gli attributi in ActiveRecord] (http://www.davidverhasselt.com/2011/06/28/5-ways-to-set-attributes-in-activerecord/) * potrebbe di interesse. – JJD

risposta

25

L'aggiornamento accetta un oggetto id e un insieme di attributi che altrimenti funzionano come update_attributes.

Quindi questo (da AWDWR 3rd edition)

Order.update(12, :name => "Barney", :email => "[email protected]") 

è equivalente a

Order.find(12).update_attributes(:name => "Barney", :email => "[email protected]") 

Quindi, se tutto quello che vogliamo fare è aggiornare una fila di id noto con una serie di attributi, allora mi piacerebbe di 'non c'è motivo per non usare update - sembra che sia per questo che l'hanno scritto!

(Esiste un modo per aggiornare il tutorial dalla versione 1.1.6? È piuttosto vecchio e non era un rilascio particolarmente sconvolgente quando era in corso. 1.2.6 era migliore: l'ultimo di 1 .xs, se ricordo bene).

+1

Grazie per lo snippet di codice, è logico. No, purtroppo non è aggiornabile. È una serie di video di lynda.com - è davvero una buona introduzione a Rails per me anche se probabilmente avrò bisogno di leggere un testo più aggiornato dopo averlo terminato. Per prima cosa ho bisogno di capire il Big Picture, che stavo attraversando un periodo difficile dopo aver letto il libro O'Reilly "Head First Rails" alcuni mesi fa. –

0

Utilizzando il metodo update_attributes, si supponga di avere già un oggetto e si passi semplicemente all'insieme di attributi. E il lavoro è fatto!