我试图从Rails引擎加载一些自定义验证器,但由于验证器未被识别,我的应用程序仍然失败。如何在Rails引擎中初始化Rails 3+应用中的自定义ActiveModel验证器
什么是正确的方式&时间来初始化引擎中的验证器?
比如我有:
class NullityValidator < ActiveModel::EachValidator
# Validates whether <tt>value</tt> is <tt>nil?</tt>.
def validate_each(record, attribute, value)
record.errors.add(attribute, :not_nil) unless value.nil?
end
end
从我的发动机内Engine < Rails::Engine
类我已经尝试了几种不同的方法来初始化自定义的验证,如:
config.before_initialize do
class NullityValidator < ActiveModel::EachValidator
end
end
config.after_initialize do
class NullityValidator < ActiveModel::EachValidator
end
end
initializer 'ab_gem.validators' do |app|
ActiveSupport.on_load :active_model do
class NullityValidator < ActiveModel::EachValidator
end
end
end
initializer 'ab_gem.validators' do |app|
ActiveSupport.on_load :active_record do
class NullityValidator < ActiveModel::EachValidator
end
end
end
initializer 'ab_gem.validators' do |app|
class NullityValidator < ActiveModel::EachValidator
end
end
我也尝试过这些运动进入一个自定义模块加载,但这些方法都没有正确初始化/加载。
任何时候被装载我的应用程序模型,我收到Unknown validator: 'NullityValidator'
这是什么错误?我不认为将它们定义为初始化程序中的空类会对你有所帮助,因为它不会去寻找验证程序的“真实”代码。 –
我收到未知验证程序:'NullityValidator',因为验证程序未在使用它们的模型之前加载。我实际上并没有将它们定义为代码中的空类。我想提供简短的片段,说明我为了简洁而试图定义类。整个验证器定义在顶部。 – JDutil
难道你只是不需要在任何地方的文件? –