2011-03-13 15 views
3

編寫Rails應用程序。我想在我的模型中提供一些更常用的驗證。我瞭解如何執行內置的驗證,以及如何編寫我自己的自定義方法。但是,我發現我在一些地方使用了相同的驗證,並且在不同的類上使用mixin會感到尷尬。Rails自定義驗證(可重複使用的宏樣式)

下面是一個例子:我有一個prop1和prop2對象。要麼是有效的,但兩者都是無效的。 現在,我有這樣的事情

class MyClass < ActiveRecord::Base 
    attr_accessor :prop1, :prop2 
    validate :prop1_prop2_mutex 

    def prop1_prop2_mutex 
    errors.add(:base, "Can not set prop1 and prop2") if prop1 && prop2 
    end 
end 

我真的很想有有點像

class MyClass < ActiveRecord::Base 
    attr_accessor :prop1, :prop2 
    validate_mutex :prop1, :prop2 
end 

,然後在其他地方我猜我需要像

def validate_mutex(property1, property2) 
    rrors.add(:base, "Can not set prop1 and prop2") if self.send(property1) && self.send(property2) 
    end 

這可能不是那麼接近。

那麼,我該如何構建新的可重用驗證方法呢?
或者有沒有更好的方法來解決這個問題?

請一般。我有幾個不同形式的問題。雖然我會感謝一個超級簡單的內置解決方案的示例,但我有更復雜的驗證,希望將該解決方案應用於此解決方案。

回答