我想在Rails 4中添加validates_zxcvbn
辅助方法,例如validates_uniqueness_of
。
我将它与我的zxcvbn_validator.rb
一起放在app / validators下面:
require 'zxcvbn'
class ZxcvbnValidator < ActiveModel::EachValidator
...
end
# This allows us to assign the validator in the model
module ActiveModel::Validations::HelperMethods
def validates_zxcvbn(*attr_names)
validates_with ZxcvbnValidator, _merge_attributes(attr_names)
end
end
但我仍然无法在我的model.rb
中使用validates_zxcvbn
错误是
lib / active_record / dynamic_matchers.rb:26:in
method_missing
: 员工的未定义方法validates_zxcvbn
(调用'Staff.connection' 建立连接):Class(NoMethodError)
我尝试将ActiveModel::Validations::HelperMethods
分隔为activemodel_validations_helper.rb
并将其放在app/helpers
下。
然后,在我的Staff.rb
模型文件中,我执行了以下操作:
class Staff < ActiveRecord::Base
include ActivemodelValidationsHelper
...
end
然后,我启动了服务器并得到了这个错误:
active_support / dependencies.rb:495:在'load_missing_constant'中:
Unable to autoload constant ActivemodelValidationsHelper
,预计 app / helpers / activemodel_validations_helper.rb来定义它(LoadError)
如何在Rails 4中包含新的验证帮助方法?
谢谢!
答案 0 :(得分:2)
遵循客户端验证的自定义验证器[教程] [1],它使用
# This allows us to assign the validator in the model
module ActiveModel::Validations::HelperMethods
def validates_zxcvbn_of(*attr_names)
validates_with ZxcvbnValidator, _merge_attributes(attr_names)
end
end
并将其置于config/initializer
下以启用模型中的validates_zxcvbn_of
。
此外,我已将zxcvbn_validator.rb
置于app/validators
下。
特别感谢@taglia,他也提到了解决方案。
答案 1 :(得分:0)
app/validators
目录(您已经完成了)在名为zxcvbn_validator.rb
的文件中创建一个文件,其中包含以下内容:
class ZxcvbnValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
result = Zxcvbn.test(value)
unless result.score > 0
record.errors[attribute] << (options[:message] || "not very secure...")
end
end
end
现在在您的模型中,您可以说
class Staff < ActiveRecord::Base
validates :password, zxcvbn: true
end
以下是一个工作示例 - https://github.com/kalmanh/zxcvbn-custom-validator