2010-03-24 8 views
15

È possibile utilizzare il metodo #save per aggiornare un record?Can Rails ActiveRecord #salva il metodo da utilizzare per aggiornare un record esistente?

So che posso creare un nuovo record utilizzando risparmiare, in questo modo:

person = Person.new 
person.save # rails will insert the new record into the database. 

Tuttavia, se trovo un record esistente prima, modificare il modello, e quindi salvarlo, è questo il lo stesso risultato di un aggiornamento?

person = Person.find(:first, :condition => "id = 1") 
person.name = "my_new_name" 
person.save # is this save performing a update or insert? 

risposta

20

Sì. Un oggetto ActiveRecord in Rails conserva la sua identità nel parametro ID. Se l'ID è impostato, Rails saprà aggiornare il record nel database con tale ID.

save è, infatti, il modo principale per creare, aggiornare o in qualsiasi modo salvare un oggetto nel database. Altri metodi come update_attributes sono solo zucchero che utilizza save al loro interno.

+3

Questo non è vero .. person = Person.new person.id = 23 person.save fallisce .. Non è l'id che lo dice è nuovo – baash05

+0

il salvataggio deve essere preformato? può essere solo person.name = 'new name'? – flyingarmadillo

+0

Non funziona. Save fa entrambi aggiorna un record esistente e ne crea uno nuovo in ogni caso. – Green

4

questo è un aggiornamento.

save(perform_validation = true)

# File vendor/rails/activerecord/lib/active_record/base.rb, line 2533 
2533:  def save 
2534:   create_or_update 
2535:  end 
+2

Divertente come tre anni dopo quel metodo non è più in base.rb ... – themarketka

Problemi correlati