Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Gem:将我自己的模块包括到ActiveModel::Validations中_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Gem:将我自己的模块包括到ActiveModel::Validations中

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用户

我正在尝试编写我的第一个gem,它对信用卡字段进行验证。我创建了一个模块
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
。put
ActiveRecord::Base.send:include,MyCcValidation
位于定义
MyCcValidation
的文件底部