我对 Rails 很陌生,并且在 Rails/ActiveRecord 似乎忽略validates_uniqueness_of
了我继承的项目中声明的范围时遇到了麻烦。我有以下模型:
class User < ActiveRecord::Base
…
validates_uniqueness_of :email, scope: :brand_id, allow_nil: true
…
belongs_to :brand
…
end
有一个现有的用户记录,其中一个email
offoo@bar.com
和一个brand_id
of 1
。
尝试使用id
of 123
、email
offoo@bar.com
和brand_id
of更新另一个用户记录时,2
出现Validation failed: Email has already been taken
错误。
发生此错误时,我看到以下两个查询一个接一个地运行:
SELECT 1 AS one FROM "users" WHERE ("users"."email" = 'foo@bar.com' AND "users"."id" != 123) LIMIT 1;
SELECT 1 AS one FROM "users" WHERE ("users"."email" = 'foo@bar.com' AND "users"."id" != 123 AND "users"."brand_id" = 2) LIMIT 1;
看起来第二个查询正在执行正确的唯一性检查,但第一个查询忽略了范围。
任何有关查看内容或如何进一步调试的提示将不胜感激。