2011-10-25 36 views
0

我有一個before_create回調,它在對象內設置了一個錯誤。錯誤在設置模型內部時被刪除

class Animal < ActiveRecord:base 
    #omitted code 
    def check_animal_has_non_poisoned_food 
     if self.food.non_poisoned_food.nil? 
     self.errors[:non_poisoned_food] = "Animal has non poisoned food" 
     return false 
     end 
    end 
end 

出於某種原因,在控制器內部,當我做一個更新屬性,雖然它驗證失敗

if animal.update_attributes(params[:animal]) 
    #ommitted 
else 
    #goes here 
    ap animal.errors //empty 
end 

存在animal.errors

+0

在這種情況下'ap'是什麼? – tadman

+1

真棒打印。這是一個寶石 – denniss

回答

1

裏面沒有錯誤我沒有看到任何地方在那裏你添加一個錯誤。通常看起來像這樣:

self.errors.add("Animal has non poisoned food") 

它添加到屬性不會呈現爲一個錯誤,即使你return false打破創建鏈。

+0

我改變了代碼。對不起,這是一個錯別字 – denniss

+0

@ denniss ..你把'check_animal_has_non_poisoned_food'方法作爲'before_create'回調嗎?然後在更新記錄期間不會被調用(它只會在創建期間被調用)。你應該使用'before_save'回調,如果你需要它的創建和更新。 – rubyprince

+1

是否有任何理由,您不能僅僅驗證:non_poisoned_food,:presence => true,:message =>「...」'而不是您自己的版本? – tadman

相關問題