我有一个嵌套的表单,具有以下结构:
我在列表模型中运行验证,以确保每个列表最多只有十个项目.
validate :max_stack_items
def max_stack_items
if items.size > 10
errors[:base] << "Stack cannot have more than 10 items"
end
Run Code Online (Sandbox Code Playgroud)
这种方法在90%的情况下都能正常工作.我实现了一项功能,因此您可以删除列表表单中的列表项,如下所示:
<%= f.hidden_field :_destroy %>
<%= link_to "remove item", '#', class: "remove_fields" %>
Run Code Online (Sandbox Code Playgroud)
我有一些相关的javascript使这种情况发生(对问题不重要).
假设我已经有10个列表项,我去编辑表单.如果我通过单击"删除项目"链接删除其中一个列表项并添加新的列表项.验证失败,因为它认为有超过10个列表项.换句话说,它没有意识到我已经删除了一个列表项并同时添加了另一个列表项(因此仍然只有10个列表项).
如何获得验证以考虑我同时删除的列表项记录?
def max_stack_items
if restaurants.reject(&:marked_for_destruction?).size > 10
errors[:base] << "Stack cannot have more than 10 items"
end
end
Run Code Online (Sandbox Code Playgroud)
此解决方案考虑了验证期间标记为销毁的项目.
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |