如何編寫這個代碼只執行一個查詢而不是兩個,並且也進行火災驗證? update_all繞過模型中定義的所有驗證。如何編寫只執行一個查詢的代碼?
model = ModelName.find(params[:id])
success = model.update_attribute(:column_name, nil)
如何編寫這個代碼只執行一個查詢而不是兩個,並且也進行火災驗證? update_all繞過模型中定義的所有驗證。如何編寫只執行一個查詢的代碼?
model = ModelName.find(params[:id])
success = model.update_attribute(:column_name, nil)
你不行。運行驗證確實至少包括一個步驟:將數據庫記錄加載到一個ruby對象中(這需要一個查詢)。更新當然的數據庫需要另一個查詢。所以無論如何,你將有兩個查詢你的任務。
可以使用update
方法:
# Updates one record
User.update(1, :name => 'testtesttest')
http://apidock.com/rails/ActiveRecord/Relation/update
但@mosch說,它仍然是兩個查詢。
User Load (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
AREL (0.0ms)[0m [1mUPDATE "users" SET "name" = 'testtesttest', "updated_at" = '2011-05-03 11:41:23.000000' WHERE "users"."id" = 1
我想你可能需要澄清你的問題,也發佈更多的代碼,並說出問題是什麼。 – ColWhi 2011-05-03 11:28:29