2012-06-15 170 views
0

我有一個嵌套的表格結構如下設置一個限制的相關記錄數:嵌套形式

  • 列表
    • 項目

我運行一個驗證在列表模型中確保每個列表最多隻有10個項目。

validate :max_stack_items 

def max_stack_items 
    if items.size > 10 
    errors[:base] << "Stack cannot have more than 10 items" 
end 

這個工作正常90%的時間。我實現了一個功能,讓您可以在列表表單中刪除列表中的項目如下:

<%= f.hidden_field :_destroy %> 
<%= link_to "remove item", '#', class: "remove_fields" %> 

我有一些關聯的JavaScript,使這種情況發生(對於這個問題並不重要)。

比方說,我已經有10個列表項,我去編輯表單。如果我通過單擊「刪除項目」鏈接刪除其中一個列表項並添加一個新的列表項。驗證失敗,因爲它認爲有超過10個列表項。換句話說,它沒有意識到我已經刪除了一個列表項並且同時添加了另一個列表項(因此仍然只有10個列表項)。

我該如何獲得驗證以考慮同時刪除哪些列表項記錄?

+0

我在考慮驗證必須是沿items.size行 - [關於標記爲刪除的項目的數量> 10 – Alex

+0

列表的驗證在項目被銷燬之前發生 – Alex

回答

5
def max_stack_items 
    if restaurants.reject(&:marked_for_destruction?).size > 10 
    errors[:base] << "Stack cannot have more than 10 items" 
    end 
end 

將該溶液考慮到是在驗證過程中標記爲破壞的項目。

+0

Was正要評論'marked_for_destruction?' - 對解決自己的問題很有幫助。 – deefour