【发布时间】:2015-02-14 08:05:26
【问题描述】:
我的大多数模型上都有default_scope,范围为current_user.company。我在我的注册页面上使用了 client_side_validations gem,这意味着没有租户集。
当唯一性验证器在 @user.email 上运行时,default_scope 会阻止验证正常运行(因为 company_id 为零),因此看起来总是一个唯一的结果。
我的用户模型:
# 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
当这个 gem 运行电子邮件验证器时,对我来说覆盖 default_scope 最实用的方法是什么?
【问题讨论】:
标签: ruby-on-rails validation devise client-side-validation default-scope