我正在使用 Rails 3、simple_form 和 cocoon 作为包含多个 TodoLists 的项目的嵌套表单。我希望我的 simple_fields_for 调用仅包含尚未软删除的 TodoList,这就是我想使用我的命名范围“未删除”的原因。
在我的项目表格中,我有:
<%= f.simple_fields_for :todo_lists, f.object.todo_lists.nondeleted do |todo_list_form| render "todo_list_fields", :f => todo_list_form end %>
这在我的编辑视图的第一次加载时工作正常(即未显示已删除的 TodoLists),但在提交验证失败的表单时,任何新添加的 TodoLists 都会丢失。
如果我删除命名范围,新添加的 TodoLists 在验证失败时不会丢失,但会显示所有 TodoLists(包括已删除的)。
我还尝试了以下方法:
<% @project.todo_lists.each do |todo_list| %>
<% if !todo_list.deleted && !todo_list.name.blank? %>
<%= f.simple_fields_for :todo_lists, todo_list do |todo_list_form| render "todo_list_fields", :f => todo_list_form end %>
<% end %>
<% end %>
这解决了这两个问题,但不允许我获得所需的灵活性,例如将 TodoLists 保持在正确顺序的能力。
有没有办法将集合传递给 simple_fields_for(据我所知,它与 Rails 的 fields_for 具有相同的相关行为),这将允许我使用命名范围和排序,而不会在验证失败时丢弃新添加的字段?