Может ли Rails ActiveRecord #save использоваться для обновления существующей записи?

Можно ли использовать метод #save для обновления записи?

Я знаю, что я могу создать новую запись, используя save, например:

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

Однако, если я сначала найду существующую запись, измените модель и сохраните ее, это тот же результат, что и обновление?

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

Ответы

Ответ 1

Да. Объект ActiveRecord в Rails сохраняет свой идентификатор в параметре ID. Если ID установлен, Rails будет знать, чтобы обновить запись в базе данных с этим идентификатором.

save является, по сути, основным способом создания, обновления или каким-либо образом сохранения объекта в базе данных. Другие методы, такие как update_attributes, - это просто сахар, который использует save в своей основе.

Ответ 2

это обновление.

save (perform_validation = true)

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