无法在Rails 4中添加ActiveModel :: Validations :: HelperMethods?

时间:2016-04-14 09:39:19

标签: ruby-on-rails ruby-on-rails-4

我想在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)

UPDATE:

我尝试将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中包含新的验证帮助方法?

谢谢!

2 个答案:

答案 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)

  1. 创建app/validators目录(您已经完成了)
  2. 在名为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
    
  3. 现在在您的模型中,您可以说

    class Staff < ActiveRecord::Base
      validates :password, zxcvbn: true
    end
    
  4. 以下是一个工作示例 - https://github.com/kalmanh/zxcvbn-custom-validator