如何在清关中禁用电子邮件验证



我正在尝试让 Cleark 与 AWS Dynamo 合作作为后端商店。我遇到的问题是我无法让 Clearp进行电子邮件唯一性验证,它无法做到这一点,因为它无法通过 SQL 查询进行标准的 ActiveRecord 唯一性验证。

根据代码中的注释,我应该能够让我的User对象返回email_optional?true,这应该禁用电子邮件的唯一性验证。所以我有:

class User < ApplicationRecord
include Dynamoid::Document
include Clearance::User
field :name
field :email
def email_optional?
puts 'yes, email is optional'
true
end
end

但是,当我尝试创建用户时,我收到一个错误,更重要的是,puts没有执行:

$ rails c
Running via Spring preloader in process 18665
Loading development environment (Rails 5.1.3)
irb(main):001:0> u = User.new(name: 'ijd', email: 'ian@fu.bar', password: 'test')
ActiveRecord::StatementInvalid: Could not find table 'editor_development_users'
from (irb):1

更新:@spickermann的回复提醒我,我应该注意到我也尝试过没有子类化ActiveRecord::Base(通过ApplicationRecord(。它给出了一个不同的错误:

class User
include Dynamoid::Document
....
irb(main):002:0> reload!
Reloading...
=> true
irb(main):003:0> u = User.new(name: 'ijd', email: 'ian@fu.bar', password: 'test')
ArgumentError: Unknown validator: 'UniquenessValidator'
from app/models/user.rb:4:in `include'
from app/models/user.rb:4:in `<class:User>'
from app/models/user.rb:2:in `<top (required)>'
from (irb):3
User.new

不会触发验证。因此,错误无法连接到验证本身。

目前,您的User模型两者兼而有之:ActiveRecord::Base的子类,它的行为类似于Dynamoid::Document

class User < ApplicationRecord 
include Dynamoid::Document
# ...
end

初始化实例时,ActiveRecord::Base从数据库中读取表定义。这会导致异常,因为该表不存在。只需从ApplicationRecord中删除继承即可。

class User
include Dynamoid::Document
# ...
end

删除继承时的第二个问题更为复杂。通常,我建议只include ActiveModel::Validations何时要验证不继承自ActiveRecord::Base的模型。但是UniquenessValidator不是在ActiveModel::Validations中定义的,而是在ActiveRecord::Validations中定义的(什么是有意义的(。这使得Clearance与不继承自ActiveRecord::Base的模型不兼容。

我可能会将UniquenessValidator的虚拟实现定义为变通方法:

class User
include Dynamoid::Document
class UniquenessValidator
def initialize(_options); end
def def validate_each(_record, _attribute, _value); end
end
# ...
end

相关内容

  • 没有找到相关文章

最新更新