2011-05-03 58 views
0

如何編寫這個代碼只執行一個查詢而不是兩個,並且也進行火災驗證? update_all繞過模型中定義的所有驗證。如何編寫只執行一個查詢的代碼?

model = ModelName.find(params[:id]) 
success = model.update_attribute(:column_name, nil) 
+0

我想你可能需要澄清你的問題,也發佈更多的代碼,並說出問題是什麼。 – ColWhi 2011-05-03 11:28:29

回答

4

你不行。運行驗證確實至少包括一個步驟:將數據庫記錄加載到一個ruby對象中(這需要一個查詢)。更新當然的數據庫需要另一個查詢。所以無論如何,你將有兩個查詢你的任務。

0

可以使用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