2010-03-24 35 views
15

Có thể sử dụng phương pháp #save để cập nhật bản ghi không?Có thể sử dụng phương thức ActiveRecord #save để cập nhật bản ghi hiện có không?

Tôi biết rằng tôi có thể tạo một kỷ lục mới sử dụng tiết kiệm, như thế này:

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

Tuy nhiên, nếu tôi tìm thấy một bản ghi hiện đầu tiên, thay đổi mô hình, và sau đó lưu nó, đây có phải là cùng một kết quả như thực hiện cập nhật?

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

Trả lời

20

Yes. Một đối tượng ActiveRecord trong Rails giữ lại danh tính của nó trong tham số ID. Nếu ID được đặt, Rails sẽ biết cập nhật bản ghi trong cơ sở dữ liệu với ID đó.

save là, trên thực tế, cách chính để tạo, cập nhật hoặc lưu bất kỳ cách nào vào đối tượng vào cơ sở dữ liệu. Các phương pháp khác như update_attributes chỉ là đường sử dụng save ở cốt lõi của chúng.

+3

Điều này không đúng .. person = Person.new person.id = 23 person.save không thành công .. Không có id cho biết nó mới. – baash05

+0

không lưu phải được định dạng trước? nó có thể chỉ là person.name = 'tên mới' không? – flyingarmadillo

+0

Nó không hoạt động. Lưu cả hai cập nhật một bản ghi hiện có và tạo một bản ghi mới. – Green

4

đây là bản cập nhật.

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

Vui cách ba năm sau phương thức đó không có trong base.rb nữa… – themarketka

Các vấn đề liên quan