我有一个具有以下结构的嵌套表单:
- 列表
- 项目
我在列表模型中运行验证,以确保每个列表最多只有十个项目。
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 个列表项)。
如何获得验证以考虑我同时删除的列表项记录?