Phân biệt update, update_attribute, update_attributes, update_column, update_columns trong Rails

Cùng nhau tìm hiểu về các phương thức cập nhật bản ghi thông dụng trong Rails

1. update

a) update(name: value)

  • Là một instance method
  • Cập nhật một hoặc nhiều thuộc tính của bản ghi
  • Kiểm tra validations, chạy callback khi cập nhật
  • Cập nhật thành công trả về True, ngược lại trả về False
  • Trường updated_at được cập nhật nếu cập nhật thành công
  • update! raise exception nếu cập nhật thất bại
user = User.find_by id: 1
user.update name: "Hanh", email: "[email protected]"

b) update(id, attributes)

  • Là một class method
  • Cập nhật thuộc tính của bản ghi với id truyền vào, có thể cập nhật nhiều bản ghi cùng lúc
  • Validations, callback được gọi khi cập nhật
  • Trả về bản ghi đó dù cập nhật thành công hay không
  • Trường updated_at được cập nhật nếu cập nhật thành công
# Cập nhật một bản ghi
User.update(1, name: "Hanh", email: "[email protected]")
# Cập nhật nhiều bản ghi
User.update([1,2], [{name: "Hanh", email: "[email protected]"}, {name: "Huong", email: "[email protected]"}])

2. update_attribute(name, value)

  • Chỉ cập nhật một thuộc tính của bản ghi
  • Bỏ qua validations, vẫn chạy callback
  • Trả về True/False
  • Trường updated_at được cập nhật
user = User.find_by id: 1
user.update_attribute :name, "Hanh"

3. update_attributes(name: value)

  • Giống với update(name: value)
  • update_attributes! raise exception nếu cập nhật không thành công

4. update_column(name, value)

  • Cập nhật một thuộc tính trực tiếp trong cơ sở dữ liệu
  • Validations, callback đều bị bỏ qua khi cập nhật
  • Trả về True/False
  • Trường updated_at không được cập nhật
user = User.find_by id: 1
user.update_column :name, "Hanh"

5. update_columns(name: value)

  • Cập nhật một hoặc nhiều thuộc tính trực tiếp trong cơ sở dữ liệu
  • Bỏ qua validations, không chạy callback
  • Trả về True/False
  • Trường updated_at không được cập nhật
user = User.find_by id: 1
user.update_columns name: "Hanh", email: "[email protected]"

Tổng kết

Method Validations Callback Cập nhật updated_at Cập nhật nhiều thuộc tính Method với ! Trả về
update(name: value) T/F
update(id, attributes) có (Có thể cập nhật nhiều bản ghi) không bản ghi
update_attribute(name, value) không không không T/F
update_attributes(name: value) T/F
update_column(name, value) không không không không không T/F
update_columns(name: value) không không không không T/F