如何编写此代码,只执行一个查询而不是两个查询并激活验证? update_all绕过模型中定义的所有验证。
model = ModelName.find(params[:id])
success = model.update_attribute(:column_name, nil)
答案 0 :(得分:4)
你做不到。运行验证确实包括至少一个步骤:将数据库记录加载到ruby对象(需要一个查询)。当然,更新数据库需要另一个查询。因此,无论如何,您将有两个查询任务。
答案 1 :(得分: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