Foo.where(:some_id => 1).update_all(:some_columnn => "1")
Đây có phải là cách đúng để cập nhật Foo không? Tôi không muốn tìm và cập nhật đối tượng.Cách cập nhật cột mà không tải đối tượng trong ActiveRecord
Foo.where(:some_id => 1).update_all(:some_columnn => "1")
Đây có phải là cách đúng để cập nhật Foo không? Tôi không muốn tìm và cập nhật đối tượng.Cách cập nhật cột mà không tải đối tượng trong ActiveRecord
Có đúng cách, nhưng hãy nhớ, n o callbacks hoặc validations sẽ được thực thi.
BTW, update_all cũng chấp nhận các điều kiện. Như thế này
Foo.update_all({:some_columnn => "1"}, {:some_id => 1})
Đây là cách tiếp cận đúng nếu bạn không muốn khởi tạo đối tượng, nhưng hãy nhớ rằng điều này cũng có nghĩa là nó sẽ không thực hiện bất kỳ xác thực hoặc gọi lại mô hình nào của bạn - nó đi thẳng đến lệnh cập nhật SQL.
Bạn có thể sử dụng điều kiện, theo api của update_all
update_all (cập nhật, điều kiện = nil, options = {})
Vì vậy, bạn có thể làm:
Foo.update_all(:some_column => '1', :some_id => 1)
As of Rails 4, các điều kiện không còn được cung cấp trên các phương pháp update_all
, nhưng thay vào đó quy định về việc thu trước. Ví dụ:
# updates everything, as usual
Foo.update_all(some_column: '1')
# update only the specified rows
Foo.where(some_id: 1).update_all(some_column: '1')