2009-07-31 61 views
10

我有一個ActiveRecord對象的集合。我希望能夠對這些對象中的每一個運行所有驗證,而無需實際將它們保存到數據庫中。我只想知道,如果他們將是有效的,我將它們保存到數據庫。換句話說,我基本上想要爲每個對象填充數據結構errors。有沒有辦法做到這一點?或者我可能錯過了errors集合的生命週期?在不保存的情況下運行ActiveRecord驗證

回答

23

您可以執行以下操作來檢查模型是有效的:

@user = User.new 
if @user.valid? 
    #do things 

如果你想看到的錯誤是什麼,你可以這樣做:

@user = User.new 
unless @user.valid? 
    @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"} 

調用「。有效?」方法運行驗證,將所有錯誤都放入一個ActiveRecord :: Errors對象中,可以像我在上面的例子中那樣訪問它。如果你喜歡的話,可以在控制檯上試一下例子來體驗一下。

+0

沿着類似的路線,我試圖顯示基於記錄的發佈鏈接是否適用於發佈或不發佈。在我的驗證中,我使用驗證:如果格式。有沒有簡單的方法來改變屬性說:真,然後檢查它是否有效發佈? 例如, post = Post.new(:title =>「title」,:published => false) post.published = true if post.valid? post.published = false – chetu 2012-03-05 17:37:12

2

在對象上運行#valid?方法將運行所有驗證並填充errors結構。

dude = Person.new 
unless dude.valid? 
    # Examine errors 
end 
相關問題