2010-03-24 9 views
15

Czy można użyć metody #save do aktualizacji rekordu?Czy można użyć metody Rails ActiveRecord #save do aktualizacji istniejącego rekordu?

wiem, że mogę tworzyć nowy rekord używając zapisać w następujący sposób:

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

Jednakże, jeśli znajdę istniejący rekord najpierw zmodyfikować model, a następnie zapisać go, czy jest to taki sam wynik jak aktualizacja?

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

Odpowiedz

20

Tak. Obiekt ActiveRecord w Railsach zachowuje swoją tożsamość w parametrze ID. Jeśli identyfikator zostanie ustawiony, Railsy będą wiedzieć, aby zaktualizować rekord w bazie danych o tym identyfikatorze.

Jest to podstawowy sposób tworzenia, aktualizowania lub w dowolny sposób zapisywania obiektu w bazie danych. Inne metody, takie jak update_attributes, są po prostu cukrem, który w ich rdzeniu używa save.

+3

To nie jest prawda .. person = Person.new person.id = 23 person.save failed .. To nie jest id, który mówi to że jest nowy. – baash05

+0

czy zapis musi być wcześniej wykonany? czy może to być po prostu person.name = 'new name'? – flyingarmadillo

+0

To nie działa. Save zarówno aktualizuje istniejący rekord, jak i tworzy nowy. – Green

4

to jest aktualizacja.

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

Zabawne, jak trzy lata później ta metoda nie jest już w base.rb ... – themarketka