Можно ли использовать метод Rails ActiveRecord #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?

2 ответа

Решение

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

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

Это обновление

сохранить (execute_validation = true)

  # File vendor/rails/activerecord/lib/active_record/base.rb, line 2533
2533:       def save
2534:         create_or_update
2535:       end
Другие вопросы по тегам