所以,我有一些簡單的用戶模型,並更新密碼的窗體。Rails在更新對象時驗證唯一性? - 非常奇怪
@user.update_attributes(:password=>params[:password])
但這並沒有工作,我想通了:
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."auth_token" = 'z7KU4I0IXLjiRMpdF6SOVQ' LIMIT 1
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."password_reset_token" = 'aMOjTN0ikPUOJo2JMVoDtQ' LIMIT 1
(0.0ms) BEGIN
User Exists (1.0ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]') AND "users"."id" != 1) LIMIT 1
(0.0ms) ROLLBACK
Redirected to http://localhost:3000/edit_user_by_reset?reset_token=aMOjTN0ikPUOJo2JMVoDtQ
通過第三選擇我可以告訴大家,這裏是唯一性驗證失敗!這就是ROLLBACK的原因。 但它沒有任何意義,當然DB中有這樣的行,因爲它是UPDATE操作。我該怎麼辦?我不想在這裏通過:validate=>false
。
至少有兩個用戶具有相同的電子郵件地址,其中一個id = 1,另一個沒有。 –
重新閱讀的問題,很顯然有這樣的用戶,因爲它是UPDATE動作,它更新現有行的一些列 –
我斷言User.find(1).valid?將返回false。你認爲「顯而易見」是不正確的。該查詢正在查找具有相同電子郵件的* other *用戶(即具有不同ID的用戶)。 –