Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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 在Rails中包含来自关注点的验证器类_Ruby On Rails_Ruby_Activesupport_Activesupport Concern - Fatal编程技术网

Ruby on rails 在Rails中包含来自关注点的验证器类

Ruby on rails 在Rails中包含来自关注点的验证器类,ruby-on-rails,ruby,activesupport,activesupport-concern,Ruby On Rails,Ruby,Activesupport,Activesupport Concern,我有一个自定义的EachValidator,用于两种不同的型号。我将其转移到一个关注点,以干燥模型: 模块Isbn 扩展ActiveSupport::关注点 包括做 类IsbnValidator

我有一个自定义的
EachValidator
,用于两种不同的型号。我将其转移到一个关注点,以干燥模型:

模块Isbn
扩展ActiveSupport::关注点
包括做
类IsbnValidator
classbook
class BookPart
在运行Rails时(在本例中通过RSpec),我收到以下警告:

$ bundle exec rspec
C:/Users/USER/api/app/models/concerns/isbn.rb:16: warning: already initialized constant Isbn::IsbnValidator::GOOD_ISBN
C:/Users/USER/api/app/models/concerns/isbn.rb:16: warning: previous definition of GOOD_ISBN was here

是否有任何方法可以避免它,并在每个模型中干净地包含验证器?

每次包含
Isbn
模块时,它都会触发
included
方法,该方法打开
IsbnValidator
类,并在其中创建
良好的Isbn
常量和
验证方法信息技术请注意,这些常量和方法每次都是在同一个类中创建的-
IsbnValidator

因此,您第一次在
Isbn验证程序
中包含您创建的
GOOD\u Isbn
模块时,之后,您将
Isbn
模块包含到另一个类中,
included
方法再次尝试在
IsbnValidator
中创建
GOOD_Isbn
常量,但显然失败了,出现了错误

因此,您的
included
方法应该如下所示:

模块Isbn
扩展ActiveSupport::关注点
包括做
好的_ISBN=/^97[89]/。冻结
def验证每个(记录、属性、值)
#剪断。。。
终止
终止
终止
通过这种方式,
GOOD\u ISBN
validate\u将为您导入的
ISBN
类创建每个
(即对于
Book
BookPart