Ich bin sehr neu in Rails und habe Probleme mit Rails/ActiveRecord anscheinend ignoriert Geltungsbereich auf einer validates_uniqueness_of
Deklaration in einem Projekt, das ich geerbt habe. Ich habe folgendes Modell:Rails validates_uniqueness_of Ignorieren des Bereichs
class User < ActiveRecord::Base
…
validates_uniqueness_of :email, scope: :brand_id, allow_nil: true
…
belongs_to :brand
…
end
Es gibt einen bestehenden Benutzerdatensatz mit einem email
von [email protected]
und ein brand_id
von 1
.
Wenn Sie einen anderen Benutzerdatensatz mit einem id
von 123
zu aktualisieren versuchen, email
von [email protected]
und ein brand_id
von 2
, erhalte ich eine Validation failed: Email has already been taken
Fehler.
Ich sehe die folgenden zwei Abfragen nacheinander ausgeführt werden, wenn dieser Fehler auftritt:
SELECT 1 AS one FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 123) LIMIT 1;
SELECT 1 AS one FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 123 AND "users"."brand_id" = 2) LIMIT 1;
Es sieht aus wie die zweite Abfrage wird die korrekte Einzigartigkeit Prüfung zu tun, aber der erste, der den Umfang ignoriert.
Irgendwelche Tipps, was zu betrachten oder weiter zu debuggen würde geschätzt.
Ich habe es auf Devise aufgedeckt, die bestätigt, dass die E-Mail eindeutig ist. –