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
)