2010-09-22 59 views
3

比方說,我們有存儲兩個整數,最小和最大的簡單模型。我們想強制min <= max在哪裏以及如何對模型進行自定義驗證?

class MinMax 
    include MongoMapper::Document 

    key :min, Integer 
    key :max, Integer 

    validate_presence_of :min, :max 
end 

1)您如何驗證min確實等於或小於max?

2)如果你不認爲這是模型的責任又在哪裏,誰應該這樣做驗證?

回答

2
validates :min_le_max 

def min_le_max 
    self.min <= self.max 
end 
+0

哦不錯,謝謝!如果我需要向用戶發送一條錯誤消息以告訴出了什麼問題,該怎麼辦? – randomguy 2010-09-22 15:30:03

+0

裏面的方法,使用'errors.add:field_name,「error message」'或'errors.add_to_base(「error message」)' – PeterWong 2010-09-22 15:37:35

2

我會以相反的方式回答你的問題。對於問題2,這種驗證絕對是模型的責任。幾乎所有程序的核心邏輯都屬於您的模型;控制器僅用於從HTTP請求映射到適當的模型方法。

爲1,只需使用validates調用自定義的驗證方法

validates :valid_range 

def valid_range 
    min <= max 
end 

如果你想自定義錯誤消息,在驗證明確添加錯誤消息:

validate :valid_range 

def valid_range 
    errors.add_to_base("Not a valid range") unless min <= max 
end 
+0

好的,謝謝兄弟!如果我需要將錯誤消息發回給用戶以說明出錯的情況怎麼辦? IE瀏覽器。你如何將錯誤信息插入到這裏? – randomguy 2010-09-22 15:34:28

1

的一流水平方法是validate,不validates ...