2013-04-22 32 views
1

我想在將它們保存到ROR中的數據庫之前驗證一些屬性。如何驗證ActiveRecord的子子類

我的代碼如下所示:

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 

我的問題是,只有ActiveRecord的(FIELD_NAME)驗證的直接祖先檢查......和具體類的實例,甚至沒有一個驗證?方法,當我嘗試手動調用它們時,我的對象只保存了部分驗證。

有什麼辦法可以調用ActiveRecord的所有子類的驗證方法嗎?

回答

0

validate的語法錯誤,其後應該沒有分號。

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 
+0

的問題是,只有 驗證:FIELD_NAME,:numericality => {:only_integer =>真} 被調用。我試着移動子類(ConcreteClass)中的所有驗證器,但沒有一個被調用.. – Antzi 2013-04-22 16:10:48

+0

@Antzi,我明白了。你的語法問題是錯誤的,我只是盲目地複製它們。分號不應該跟隨'validate',而是在符號之前。我在回答中修改了它。 – 2013-04-22 16:14:01

+0

爲什麼不調用超類代碼?我並不是說特別是'驗證'會起作用,目前無法檢查 - 但它是類聲明中的正常代碼,並且沒有理由不會被調用。 – 2013-04-22 16:17:00