Ruby on rails 如何验证ActiveRecord的子类
我想在将某些属性保存到ROR中的数据库之前验证它们 我的代码如下所示:Ruby on rails 如何验证ActiveRecord的子类,ruby-on-rails,inheritance,activerecord,Ruby On Rails,Inheritance,Activerecord,我想在将某些属性保存到ROR中的数据库之前验证它们 我的代码如下所示: class AbstractClass < ActiveRecord::Base validate :field_name, :numericality => { :only_integer => true } self.abstract_class = true end class OtherAbstractClass < AbstractClass validate :other_fie
class AbstractClass < ActiveRecord::Base
validate :field_name, :numericality => { :only_integer => true }
self.abstract_class = true
end
class OtherAbstractClass < AbstractClass
validate :other_field, :numericality => { :only_integer => true }
self.abstract_class = true
end
class ConcreteClass < OtherAbstractClass
validate :third_field, :numericality => { :only_integer => true }
end
class AbstractClass{:仅\u integer=>true}
self.abstract_class=true
终止
类OtherAbstractClass{:only_integer=>true}
self.abstract_class=true
终止
类ConcreteClass<其他抽象类
验证:第三个_字段,:numericality=>{:only_integer=>true}
终止
我的问题是,只检查ActiveRecord(字段名称)验证的直接祖先。。。而ConcreteClass的实例甚至没有一个validate?方法,并且仅通过部分验证保存对象
有没有办法调用ActiveRecord所有子类的验证方法?验证的语法错误,后面不应该有分号
class ConcreteClass < OtherAbstractClass
validate :field_name, :numericality => { :only_integer => true }
validate :other_field, :numericality => { :only_integer => true }
validate :third_field, :numericality => { :only_integer => true }
# other code
end
class-ConcreteClass{:仅\u integer=>true}
验证:其他_字段,:numericality=>{:only_integer=>true}
验证:第三个_字段,:numericality=>{:only_integer=>true}
#其他代码
终止
问题是只调用validate:field\u name,:numericality=>{:only\u integer=>true}。我试图移动子类(ConcreteClass)中的所有验证器,但没有一个被调用..@Antzi,我明白了。你所说的语法是错误的,我只是盲目地复制了它们。分号不应在validate
之后,而应在符号之前。我在回答中修改了它。为什么不调用超类代码?我不是说,验证
特别有效,目前无法检查——但这是类声明中的正常代码,没有理由不调用它。@BillyChan,我编辑了代码,我犯了一个错误,写了验证:字段名称
而不是验证:字段名称
,谢谢。@DaveNewton,我的错误在于,在没有太多思考和验证的情况下得出结论。我先前的主张是错误的。抱歉搞混了。