0
Listing < AR 
    has_many :images 
    accepts_nested_attributes_for :images, :allow_destroy => true 
    validate :validate_image_count 

    def validate_image_count 
    errors.add_to_base("too few") if images.length < 1 
    end 
end 

Image < AR 
    belongs_to :listing 
end 

在我的清單#編輯表單中,我使用fields_for爲所有圖像提供了字段,並提供了用於刪除圖像的複選框。這工作正常。我想強制執行一項檢查,以使列表僅在至少有一個圖像且最多爲6時有效。Rais - 如何防止刪除家長的所有子女記錄

在我當前的設置中,我可以編輯並刪除所有圖像,然後更新列表。

我已經嘗試使用上面顯示的驗證,但那不被稱爲。可能只是nested_attributes在rails中工作的方式。什麼是執行此檢查的最佳方式?

+0

您可以添加保存記錄的代碼部分嗎? – zsquare 2012-01-11 12:24:37

回答

0

因爲當您調用驗證方法時圖像不會被刪除,所以它將在圖像長度上返回true。你可以使用marked_for_destruction?

def validate_image_count 
    errors.add_to_base("too few") self.images.any? { |i| i.marked_for_destruction? } 
end 
+0

感謝您的回答! – robodisco 2012-01-22 12:45:57

+0

不客氣。 :) – 2012-01-26 13:38:31