Ruby on rails Gem:将我自己的模块包括到ActiveModel::Validations中
我正在尝试编写我的第一个gem,它对信用卡字段进行验证。我创建了一个模块Ruby on rails Gem:将我自己的模块包括到ActiveModel::Validations中,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试编写我的第一个gem,它对信用卡字段进行验证。我创建了一个模块MyCcValidation,并完成了以下工作: class User < ActiveRecord::Base include MyCcValidation my_validation_helper { some_data } end class用户
MyCcValidation
,并完成了以下工作:
class User < ActiveRecord::Base
include MyCcValidation
my_validation_helper { some_data }
end
class用户
我希望实现的是能够将gem添加到我的
Gemfile
,并使my\u validation\u helper
可用。我尝试了许多扩展ActiveModel::Validations
的方法,但到目前为止没有成功。这是我的第一块宝石,所以我可能遗漏了一些东西,因为例如design
似乎没有问题。如何做到这一点?直接扩展ActiveModel::Validations
听起来不是个好主意。尝试使用定义自定义验证程序类,然后重新打开ActiveModel::Validations::HelperMethods
模块,并在其中添加您的\u validation\u 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
类MyCustomValidator
在内部,
ActiveModel::Validations
扩展了HelperMethods,因此您的validation helper方法应该对所有模型都可用。您更愿意将其包含在ActiveRecord::Base中。如果是,该如何做?请尝试:ActiveRecord::Base.send:include,MyCcValidation
尝试过,User
自动加载常量User::SomeOtherModule时检测到循环依赖项。为了澄清,模块扩展了关注点
,并在包含的
块中有一些标准验证,如验证:名称、状态:true
。putActiveRecord::Base.send:include,MyCcValidation
位于定义MyCcValidation
的文件底部