Gem:将我自己的模块包含在ActiveModel :: Validations中

时间:2015-05-08 12:31:13

标签: ruby-on-rails ruby

我试图写我的第一个宝石,它有信用卡领域的验证。我创建了一个模块MyCcValidation,以下内容有效:

class User < ActiveRecord::Base
  include MyCcValidation
  my_validation_helper { some_data }
end

我希望实现的目标是能够将gem添加到我的Gemfile并且my_validation_helper可用&#34;开箱即用&#34;。我尝试了很多方法来扩展ActiveModel::Validations但到目前为止没有运气。它是我的第一颗宝石,所以我可能会遗漏一些东西,例如devise似乎没有任何问题。应该怎么做?

1 个答案:

答案 0 :(得分:1)

直接扩展ActiveModel::Validations并不是一个好主意。尝试定义自定义验证器类,然后重新打开ActiveModel::Validations::HelperMethods模块并在那里添加your_validation_helper

示例:

class MyCustomValidator < ActiveModel::Validator
  def validate(record)
    # ...
  end
end

module ActiveModel::Validations
  module HelperMethods
    def validates_my_custom_stuff(*attr_names)
      validates_with MyCustomValidator, attr_names
    end
  end
end

在内部,ActiveModel::Validations扩展了HelperMethods,因此您的验证帮助方法应该适用于所有模型。