私はdefault_scope
、スコープがcurrent_user.company
. サインアップ ページで client_side_validations gem を使用しています。これは、テナント セットがないことを意味します。
一意性バリデーターが@user.email
default_scope で実行されると、検証が適切に実行されなくなり ( company_id
nil であるため)、常に一意の結果のように見えます。
私のユーザーモデル:
# user.rb
...
default_scope { where(company_id: Company.current_id) }
...
このクエリは、電子メールを検証するときに実行されます。
Started GET "/validators/uniqueness?case_sensitive=true& \
user%5Bemail%5D=me%2B40%40example.com&_=1423897339854" \
for 76.175.168.2 at 2015-02-14 07:02:30 +0000
User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE \
"users"."company_id" IS NULL AND "users"."email" = 'me@example.com' LIMIT 1
ユーザー モデルからを削除するdefault_scope
と、正しい結果と適切な検証が得られます。
Started GET "/validators/uniqueness?case_sensitive=true& \
user%5Bemail%5D=me%2B40%40example.com&_=1423897339854" \
for 76.175.168.2 at 2015-02-14 07:02:30 +0000
User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE \
"users"."email" = 'me@example.com' LIMIT 1
default_scope
この gem が電子メールバリデーターを実行するときにオーバーライドする最も実用的な方法は何ですか?