2012-05-30 48 views

回答

29

嘗試做這樣的事情:

# Your Model.rb 
validate :my_own_validation_method 

... 

private 

def my_own_validation_method 
    if there_is_no_sunday_in_the_range 
     self.errors[:base] << "You must have a Sunday in the time range!" 
    end 
end 

基本上,你可以添加你自己的複雜的驗證的模型,當你看到一些錯誤已經發生了,你可以在陣列中添加一個錯誤字符串錯誤。

+1

完美,這正是我所需要的。無法在文檔中找到它 –

+2

什麼是:基於錯誤散列? – holaSenor

+4

通常,您可以將錯誤添加到特定屬性。例如,如果你有一個'age'屬性的'User'模型,你可能想爲該屬性添加一個錯誤,所以你會寫'self.errors [:age] <<「不能小於0 「'這會產生像」年齡不能小於0「的錯誤。但是,如果錯誤不是關於任何特定的屬性,您可以將其添加到基礎,即模型本身。所以'self.errors [:base] <<「一切都是錯誤的!」會產生錯誤信息「一切都是錯誤的!它沒有連接到任何特定的屬性。 – MrDanA

5

您可以使用errors[:base]添加一般性錯誤,這些錯誤並不是與一個屬性特別綁定的 - rails guide link

7
model_instance.errors[:base] << "msg" 
1

實際上,你可以命名你喜歡的任何哈希鍵:

instance.errors[:case_of_the_sundays] << "Error, son." 

只是一點點更多的描述。

0

以上答案已過時。對於Rails 5及更高版本,您需要使用:base作爲第一個參數調用ActiveModel::Errors add方法。看下面的例子。

model_instance.errors.add(
    :base, 
    :name_or_email_blank, 
    message: "either name or email must be present" 
) 
相關問題